diff --git a/analytics/analytics-bitrate-ladder-validator/README.md b/analytics/analytics-bitrate-ladder-validator/README.md index c98f7bf4..c46f7b56 100644 --- a/analytics/analytics-bitrate-ladder-validator/README.md +++ b/analytics/analytics-bitrate-ladder-validator/README.md @@ -5,6 +5,7 @@ Build and customize graphs exactly the way your team needs it to help troublesho ### Tags + - experimental - dashboard - analytics - bitrate diff --git a/analytics/analytics-bitrate-ladder-validator/info.yaml b/analytics/analytics-bitrate-ladder-validator/info.yaml deleted file mode 100644 index 291a993a..00000000 --- a/analytics/analytics-bitrate-ladder-validator/info.yaml +++ /dev/null @@ -1,29 +0,0 @@ -title: Bitrate Ladder Validator -description: Build and customize graphs exactly the way your team needs it -long_description: Build and customize graphs exactly the way your team needs it to help troubleshoot, optimize and plan your development efforts. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - available-bitrates.js - - available-bandwidth.js - - playback-bitrate.js - -tags: - - experimental - - dashboard - - analytics - - bitrate - - ladder validator - - monitor - - REST - - AB - - testing - - QOE - -hide_github_link: true diff --git a/analytics/analytics-impressions/info.yaml b/analytics/analytics-impressions/info.yaml deleted file mode 100644 index 8a12190e..00000000 --- a/analytics/analytics-impressions/info.yaml +++ /dev/null @@ -1,13 +0,0 @@ -title: Impression Count -description: Query the Analytics Impressions that occurred in the last 24 hours, grouped by hour -long_description: Querying the analytics engine to send specific metrics to your dashboard is what the Bitmovin Analytics system is all about. See the new Bitmovin Analytics demo. - -code: - show_code: true - language: js - files: - - impressions.js - -tags: - - basic - - impression diff --git a/analytics/analytics-industry-insights/README.md b/analytics/analytics-industry-insights/README.md new file mode 100644 index 00000000..d88afcd3 --- /dev/null +++ b/analytics/analytics-industry-insights/README.md @@ -0,0 +1,9 @@ +# Industry Insights Demo + +Gain insights into video performance across the globe provided by Bitmovin Analytics +undefined + +### Tags + + - analytics + - industry insights \ No newline at end of file diff --git a/analytics/cost-of-errors/README.md b/analytics/cost-of-errors/README.md new file mode 100644 index 00000000..dd7ef9a9 --- /dev/null +++ b/analytics/cost-of-errors/README.md @@ -0,0 +1,9 @@ +# Cost of errors + +Calculate the cost impact of errors +Calculate the cost impact of errors using custom inputs from your video platform + +### Tags + + - analytics + - cost of errors \ No newline at end of file diff --git a/analytics/player-analytics-bundling/README.md b/analytics/player-analytics-bundling/README.md index c98f7bf4..4ede8002 100644 --- a/analytics/player-analytics-bundling/README.md +++ b/analytics/player-analytics-bundling/README.md @@ -1,16 +1,12 @@ -# Bitrate Ladder Validator +# Player and Analytics Bundling -Build and customize graphs exactly the way your team needs it -Build and customize graphs exactly the way your team needs it to help troubleshoot, optimize and plan your development efforts. +Optimize every play with no additional setup +See how the new bundling of the player and analytics works. You get analytics data points instantly, without additional setup. Start analyzing your impressions right away. ### Tags - - dashboard + - player - analytics - - bitrate - - ladder validator - - monitor - - REST - - AB - - testing - - QOE \ No newline at end of file + - bundling + - no setup + - insights \ No newline at end of file diff --git a/analytics/player-analytics-bundling/info.yaml b/analytics/player-analytics-bundling/info.yaml deleted file mode 100644 index e8c9ed91..00000000 --- a/analytics/player-analytics-bundling/info.yaml +++ /dev/null @@ -1,19 +0,0 @@ -title: Player and Analytics Bundling -description: Optimize every play with no additional setup -long_description: See how the new bundling of the player and analytics works. You get analytics data points instantly, without additional setup. Start analyzing your impressions right away. - -executable: - executable: true - indexfile: index.html - -tags: - - player - - analytics - - bundling - - no setup - - insights - -additionalCategories: - - player - -hide_github_link: true diff --git a/encoding/multi-codec-streaming/info.yaml b/encoding/multi-codec-streaming/info.yaml deleted file mode 100644 index ab8105c7..00000000 --- a/encoding/multi-codec-streaming/info.yaml +++ /dev/null @@ -1,22 +0,0 @@ -title: Multi-Codec Streaming -description: Save bandwidth and improve quality by ensuring that you are delivering the most efficient codec possible -long_description: Improve video quality by encoding in multiple codecs and dynamically switching between codecs based on the user’s individual playback environment. - -executable: - executable: true - indexfile: index.html - -tags: - - multi codec streaming - - h264 - - h265 - - vp9 - - hevc - - hls - - dash - - -additionalCategories: - - player - -priority: 980 diff --git a/encoding/per-scene-adaptation/README.md b/encoding/per-scene-adaptation/README.md index 7e1509e7..ba918f18 100644 --- a/encoding/per-scene-adaptation/README.md +++ b/encoding/per-scene-adaptation/README.md @@ -5,6 +5,7 @@ Per-Scene offers another method to improve quality and or reduce bandwidth consu ### Tags + - experimental - adaptation - scene - encoding \ No newline at end of file diff --git a/encoding/per-scene-adaptation/info.yaml b/encoding/per-scene-adaptation/info.yaml deleted file mode 100644 index fd914109..00000000 --- a/encoding/per-scene-adaptation/info.yaml +++ /dev/null @@ -1,19 +0,0 @@ -title: Per-Scene Adaptation -description: Save up to 30% on CDN costs and improve QoE with Per-Scene Adaptation -long_description: Per-Scene offers another method to improve quality and or reduce bandwidth consumption by enabling the player to anticipate content complexity. - -executable: - executable: true - indexfile: index.html - -tags: - - experimental - - adaptation - - scene - - encoding - - -additionalCategories: - - player - -priority: 950 diff --git a/encoding/per-title-encoding/info.yaml b/encoding/per-title-encoding/info.yaml deleted file mode 100644 index 3d579624..00000000 --- a/encoding/per-title-encoding/info.yaml +++ /dev/null @@ -1,12 +0,0 @@ -title: Per-Title Encoding -description: Adjust the bitrate based on the complexity of the source file -long_description: Per-Title Encoding is a technique for optimizing the bitrate of your encoding profiles based on the content of the video that you are encoding. - -executable: - executable: true - indexfile: index.html - -tags: - - per title encoding - -priority: 1000 diff --git a/package.json b/package.json index 3279ec35..6a49f8a2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "scripts": { - "generate-readmes": "node ./scripts/yamlToReadmeConverter.js", - "check-readmes": "node ./scripts/checkYamlAndReadme.js" + "generate-readmes": "node ./scripts/jsonToReadmeConverter.js", + "check-readmes": "node ./scripts/checkJsonAndReadme.js" }, "dependencies": { "file-exists": "^5.0.1", diff --git a/player/4k/info.yaml b/player/4k/info.yaml deleted file mode 100644 index 436caaac..00000000 --- a/player/4k/info.yaml +++ /dev/null @@ -1,16 +0,0 @@ -title: 4K -description: Enable users to watch 4K high-definition content -long_description: To be defined. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - -tags: - - To be defined diff --git a/player/ad-event-verification-omsdk/README.md b/player/ad-event-verification-omsdk/README.md new file mode 100644 index 00000000..57ff8795 --- /dev/null +++ b/player/ad-event-verification-omsdk/README.md @@ -0,0 +1,12 @@ +# Ad Verification with Open Measurement SDK + +Ad viewability and verification measurement using the Open Measurement SDK. +The IAB Tech Lab's OM SDK facilitates third-party access to ad measurement data for ads played out by the Bitmovin player. + +### Tags + + - advertisement + - tracking + - verification + - om sdk + - open measurement \ No newline at end of file diff --git a/player/ad-event-verification-omsdk/css/style.css b/player/ad-event-verification-omsdk/css/style.css new file mode 100644 index 00000000..d14f283a --- /dev/null +++ b/player/ad-event-verification-omsdk/css/style.css @@ -0,0 +1,115 @@ +@media (min-width: 1680px) { + .demo-row { + flex-direction: row; + } + .demo-video { + width: 62% !important; + margin-right: 3%; + } + .demo-input { + width: 35% !important; + } + .demo-start { + padding-top: 0px !important; + } +} + +.demo-event-box { + padding: 23px; + border: solid 1px #CBE0ED; + border-radius: 4px; +} + +.demo-event-box>div { + font-size: 20px; + font-weight: 500; + padding-bottom: 23px; +} + +#logContent { + height: 300px; + width: 100%; + font-size: 16px; + line-height: 19px; + overflow-y: scroll; + overflow-wrap: break-word; + margin-top: 0px; + padding-top: 0px; + padding-left: 0px; + background-color: #fff; + font-family: 'Courier New', Courier, monospace; + color: #000000; +} + +.log-message { + display: flex; + flex-direction: row; + margin-bottom: unset !important; + flex-wrap: wrap; +} + +.demo-input-box { + border: solid 1px #CBE0ED; + border-radius: 4px; + padding: 15px 20px 10px 20px; + margin: 7px; + width: 100%; +} + +.demo-input-box>div { + padding-bottom: 15px; +} + +.demo-button { + width: 100%; +} + +.demo-input-box>input { + margin-bottom: 10px; +} + +.demo-row { + display: flex; +} + +.demo-start { + margin: 7px; +} + +.demo-input { + display: flex; + flex-direction: column; + width: 100%; + align-items: flex-end; +} + +.demo-video { + width: 100%; +} + +.demo-button { + height: 40px; +} + +.demo-defaults { + display: flex; + flex-direction: row; +} + +.demo-defaults>.default-text { + padding-left: 15px; + font-size: 15px; +} + +.demo-detail ol li { + margin-bottom: 1rem; +} + +.demo-detail a { + font-size: 18px; +} + +.error { + color: red; + font-weight: bold; +} diff --git a/player/ad-event-verification-omsdk/icon.svg b/player/ad-event-verification-omsdk/icon.svg new file mode 100644 index 00000000..e74d536a --- /dev/null +++ b/player/ad-event-verification-omsdk/icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/player/ad-event-verification-omsdk/index.html b/player/ad-event-verification-omsdk/index.html new file mode 100644 index 00000000..0a11cb34 --- /dev/null +++ b/player/ad-event-verification-omsdk/index.html @@ -0,0 +1,125 @@ + + + + + + +
+

+ This demo showcases how to enable ad event reporting using the Open Measurement SDK for viewability measurement and tracking. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+ OM SDK Tracker Configuration +
+
+
+ + +
+
+ + +
+
+
+
+ Verification Resource +
+
+ + + +
+
+ +
+
+
+
+
+
+
+ Event Log +
+
+
+
+
+
+
+
+

+ Getting Started Guide +

+
+
+

+ 1. Acquire the OM SDK files from the + + IAB Tech Lab Tools Portal + +

+

+ 2. Include the following scripts in your page +

+ +
+
+ ${code:page.html} +
+
+

+ 3. Set up the player instance for ad verification using OM SDK +

+
    +
  1. + Add player modules to player core +
  2. +
  3. + Create a player configuration including a + + OM SDK Tracker configuration + +
  4. +
  5. + Instantiate the player with above configuration, load a source & play +
  6. +
+

+ Note: The configured + + validationScriptUrl + + , among other things, defines which ad tracking events should subscribed to and the location of the verification server to report to. +

+
+
+ ${code:page.js} +
+
diff --git a/player/ad-event-verification-omsdk/info.json b/player/ad-event-verification-omsdk/info.json new file mode 100644 index 00000000..ffd9d21d --- /dev/null +++ b/player/ad-event-verification-omsdk/info.json @@ -0,0 +1,24 @@ +{ + "title": "Ad Verification with Open Measurement SDK", + "description": "Ad viewability and verification measurement using the Open Measurement SDK", + "long_description": "The IAB Tech Lab's OM SDK facilitates third-party access to ad measurement data for ads played out by the Bitmovin player.", + "executable": { + "executable": true, + "indexfile": "index.html" + }, + "code": { + "show_code": true, + "language": "js", + "files": [ + "page.js", + "page.html" + ] + }, + "tags": [ + "advertisement", + "tracking", + "verification", + "om sdk", + "open measurement" + ] +} diff --git a/player/ad-event-verification-omsdk/js/script.js b/player/ad-event-verification-omsdk/js/script.js new file mode 100644 index 00000000..cc75ea3b --- /dev/null +++ b/player/ad-event-verification-omsdk/js/script.js @@ -0,0 +1,198 @@ +var adTag = 'https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ct%3Dskippablelinear&correlator=' + Date.now(); +var conf = { + key: '29ba4a30-8b5e-4336-a7dd-c94ff3b25f30', + playback: { + muted: true + }, + advertising: { + adBreaks: [{ + tag: { + url: adTag, + type: 'vast' + }, + position: 'pre', + }], + withCredentials: false, + trackers: { + omSdk: assembleOmSdkTrackerConfig(), + } + }, +}; +var source = { + dash: 'https://bitmovin-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd', + hls: 'https://bitmovin-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8', + progressive: 'https://bitmovin-a.akamaihd.net/content/MI201109210084_1/MI201109210084_mpeg-4_hd_high_1080p25_10mbits.mp4', + poster: 'https://bitmovin-a.akamaihd.net/content/MI201109210084_1/poster.jpg' +}; +var player; + +function getTimestamp() { + var now = new Date(); + var h = checkTime(now.getHours()); + var m = checkTime(now.getMinutes()); + var s = checkTime(now.getSeconds()); + var mm = checkTime(now.getMilliseconds()); + now = h + ":" + m + ":" + s + ":" + mm; + return '' + now + ''; +} + +function checkTime(i) { + return (i < 10) ? "0" + i : i; +} + +/** + * Used by the OM SDK validation script to log tracking events + */ +window.log = function(message, data) { + $('

').append(getTimestamp() + ' - ').append(message, ' ', renderjson(data)).prependTo('#logContent'); +} + +function clearEventLog() { + var log = document.querySelector('#logContent'); + + while (log.firstChild) { + log.removeChild(log.lastChild); + } +} + +function displayError(message) { + document.querySelector('#error-wrapper').classList.remove('d-none'); + document.querySelector('#error').innerHTML = message; +} + +function clearError(message) { + document.querySelector('#error-wrapper').classList.add('d-none'); + document.querySelector('#error').innerHTML = ''; +} + +$('#validationscripturl-input').on('input', function(e) { + if (e.target.value) { + $('#event-log-row').hide(); + } else { + $('#event-log-row').show(); + } +}); + +$('#apply-settings-btn').on('click', function(e) { + var recreate = function() { + conf.advertising.trackers.omSdk = assembleOmSdkTrackerConfig(); + player = setupPlayer(conf, source); + }; + + if (player) { + player.destroy().then(function() { + recreate(); + clearEventLog(); + }); + } else { + recreate(); + clearEventLog(); + } + + clearError(); +}); + +function getPartnerName() { + const input = document.querySelector('#partnername-input'); + return input.value || input.placeholder; +} + +function getPartnerVersion() { + const input = document.querySelector('#partnerversion-input'); + return input.value || input.placeholder; +} + +function getValidationScriptUrl() { + var demoValidationScript = 'https://cdn.bitmovin.com/content/player-web/lib/omsdk/omid-validation-verification-script-v1-player-demo.js'; + return document.querySelector('#validationscripturl-input').value || demoValidationScript; +} + +function getVendorKey() { + return document.querySelector('#vendorkey-input').value; +} + +function getParams() { + return document.querySelector('#params-input').value; +} + +function assembleVerificationResourceConfig() { + var verificationResource = { + validationScriptUrl: getValidationScriptUrl(), + }; + var vendorKey = getVendorKey(); + if (vendorKey) { + verificationResource.vendorKey = vendorKey; + } + var params = getParams(); + if (params) { + verificationResource.params = params; + } + return verificationResource; +} + +function assembleOmSdkTrackerConfig() { + return { + partnerName: getPartnerName(), + partnerVersion: getPartnerVersion(), + verificationResources: [ + assembleVerificationResourceConfig() + ], + }; +} + +function setupPlayer(conf, source) { + var playerContainer = document.querySelector('#player-container'); + var player = new bitmovin.player.Player(playerContainer, conf); + + player.on('error', function(e) { + displayError('Error: ' + e.code + '/' + e.name); + }); + + player.on('aderror', function(e) { + displayError('Ad Error: ' + e.message + ' (potentially caused by ad blocker)'); + console.warn(e); + }); + + player.load(source); + return player; +} + +function injectScript(src) { + return new Promise(function(resolve, reject) { + const script = document.createElement('script'); + script.src = src; + script.addEventListener('load', resolve); + script.addEventListener('error', function(e) { + reject(e.error) + }); + document.head.appendChild(script); + }); +} + +function isIe() { + return /MSIE|Trident/.test(navigator.userAgent); +} + +function isEdgeLegacy() { + return /Edge\/18/.test(navigator.userAgent); +} + +$(document).ready(function() { + renderjson.set_icons('+ ', '- '); + + if (isIe() || isEdgeLegacy()) { + displayError('Sorry! This demo is not supported on Internet Explorer and Edge Legacy web browsers.'); + document.querySelector('#player-row').classList.add('d-none') + document.querySelector('#event-log-row').classList.add('d-none') + return; + } + + Promise.all([ + injectScript('https://cdn.bitmovin.com/player/web/8/modules/bitmovinplayer-advertising-bitmovin.js'), + injectScript('https://cdn.bitmovin.com/player/web/8/modules/bitmovinplayer-advertising-omsdk.js') + ]).then(function() { + bitmovin.player.Player.addModule(bitmovin.player['advertising-bitmovin'].default); + bitmovin.player.Player.addModule(bitmovin.player['advertising-omsdk'].default); + player = setupPlayer(conf, source); + }); +}); diff --git a/player/ad-event-verification-omsdk/page.html b/player/ad-event-verification-omsdk/page.html new file mode 100644 index 00000000..f7a465b4 --- /dev/null +++ b/player/ad-event-verification-omsdk/page.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/player/ad-event-verification-omsdk/page.js b/player/ad-event-verification-omsdk/page.js new file mode 100644 index 00000000..e40ac8f6 --- /dev/null +++ b/player/ad-event-verification-omsdk/page.js @@ -0,0 +1,38 @@ +// Add modules for ordinary playback, e.g. here specifically for DASH streams (step a) +bitmovin.player.core.Player.addModule(bitmovin.player['engine-bitmovin'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['mserenderer'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['xml'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['dash'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['abr'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['container-mp4'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['polyfill'].default); + +// Add Bitmovin Advertising and OM SDK player modules +bitmovin.player.core.Player.addModule(bitmovin.player['advertising-core'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['advertising-bitmovin'].default); +bitmovin.player.core.Player.addModule(bitmovin.player['advertising-omsdk'].default); + +// Create player config & include a OM SDK tracker config (step b) +var conf = { + key: '', + advertising: { + adBreaks: [ /* ... */ ], + trackers: { + omSdk: { + partnerName: 'awesome-company', + partnerVersion: '1.3.25', + verificationResources: [{ + validationScriptUrl: 'https://somewhere.com/validation-script.js', + }] + }, + } + }, +}; + +// Create player instance & load source (step c) +var playerContainer = document.getElementById('player-container'); +var player = new bitmovin.player.core.Player(playerContainer, conf); + +player.load({ + dash: 'https://bitmovin-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd', +}); diff --git a/player/ad-event-verification/info.yaml b/player/ad-event-verification/info.yaml deleted file mode 100644 index ce8a93c2..00000000 --- a/player/ad-event-verification/info.yaml +++ /dev/null @@ -1,17 +0,0 @@ -title: Ad Event Verification -description: Enable ad event reporting -long_description: To be defined. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - - adEvents.js - -tags: - - To be defined diff --git a/player/ad-scheduling/info.yaml b/player/ad-scheduling/info.yaml deleted file mode 100644 index 1a2cf805..00000000 --- a/player/ad-scheduling/info.yaml +++ /dev/null @@ -1,21 +0,0 @@ -title: Ad Scheduling -description: Schedule VAST / IMA / VPAID ads at your desired time -long_description: This demo showcases the Bitmovin Player’s ad insertion capabilities. The player can be used with different advertising standards, namely VAST, VPAID, IMA and VMAP. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - dynamic-schedule.js - -tags: - - advertisement - - VAST - - IMA - - VPAID - -priority: 860 diff --git a/player/audio-api/README.md b/player/audio-api/README.md index bf3d8038..53670da9 100644 --- a/player/audio-api/README.md +++ b/player/audio-api/README.md @@ -5,4 +5,4 @@ To be defined. ### Tags - - to be defined \ No newline at end of file + - experimental \ No newline at end of file diff --git a/player/audio-api/info.yaml b/player/audio-api/info.yaml deleted file mode 100644 index 0d4abbe4..00000000 --- a/player/audio-api/info.yaml +++ /dev/null @@ -1,17 +0,0 @@ -title: Audio API -description: Enable users to stream video as they scroll on the page -long_description: To be defined. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - - scrollListener.js - -tags: - - experimental diff --git a/player/audio-only-streaming/info.yaml b/player/audio-only-streaming/info.yaml deleted file mode 100644 index e617b420..00000000 --- a/player/audio-only-streaming/info.yaml +++ /dev/null @@ -1,16 +0,0 @@ -title: Audio Only Streaming -description: Enables users to stream audio only content -long_description: To be defined. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - -tags: - - To be defined diff --git a/player/av1/info.yaml b/player/av1/info.yaml deleted file mode 100644 index 55a74242..00000000 --- a/player/av1/info.yaml +++ /dev/null @@ -1,23 +0,0 @@ -title: AV1 -description: AV1 is a next generation codec that can reduce bandwidth and CDN costs by a factor of 10 -long_description: Bitmovin is spearheading the drive towards a commercially viable AV1 solution. See our online demonstration of AV1 encoding and playback. - -executable: - executable: true - indexfile: index.html - -tags: - - experimental - - AV1 - - Chrome - - Firefox - - Google - - Mozilla - - Nightly - - Canary - -additionalCategories: - - encoding - -priority: 920 -hidden: false diff --git a/player/caption-styling/info.yaml b/player/caption-styling/info.yaml deleted file mode 100644 index 1b0c0135..00000000 --- a/player/caption-styling/info.yaml +++ /dev/null @@ -1,19 +0,0 @@ -title: CEA-608/708 captions and styling -description: This demo shows the Bitmovin Player displaying a video with captions and offering all the controls necessary to be compliant with CEA-708 -long_description: This demo shows the Bitmovin Player displaying a video with captions and offering all the controls necessary to be compliant with CEA-708. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - captions - - cea-708 - - basic - - cea styling diff --git a/player/channel-switching/info.yaml b/player/channel-switching/info.yaml deleted file mode 100644 index 4a7959ba..00000000 --- a/player/channel-switching/info.yaml +++ /dev/null @@ -1,19 +0,0 @@ -title: Fast Channel Switching -description: Switch between two channels without destroying the player and speeding up the process -long_description: This interactive video demo showcases the Bitmovin Player’s ability to switch between channels, quickly and seamlessly. Try this three channel demo. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - - switchChannel.js - -tags: - - switch - - load - - channel diff --git a/player/chromecast/README.md b/player/chromecast/README.md index dc5c9802..7d80e124 100644 --- a/player/chromecast/README.md +++ b/player/chromecast/README.md @@ -7,4 +7,5 @@ The Chromecast Player allows you to cast directly from your device to your telev - chromecast - television - - cast \ No newline at end of file + - cast + - caf \ No newline at end of file diff --git a/player/chromecast/info.yaml b/player/chromecast/info.yaml deleted file mode 100644 index 97163620..00000000 --- a/player/chromecast/info.yaml +++ /dev/null @@ -1,22 +0,0 @@ -title: Chromecast -description: Cast video directly to your television screen using Chromecast and the Bitmovin Player -long_description: The Chromecast Player allows you to cast directly from your device to your television screen using the Chromecast browser plugin and a Chromecast enabled display device. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - - caf.js - -tags: - - chromecast - - television - - cast - - caf - -priority: 820 diff --git a/player/chromeless/info.yaml b/player/chromeless/info.yaml deleted file mode 100644 index f6753113..00000000 --- a/player/chromeless/info.yaml +++ /dev/null @@ -1,19 +0,0 @@ -title: Chromeless Player -description: This demo shows how the player can work without an UI -long_description: This demo showcases how the Bitmovin Player can be controlled completely via the API. The code example gives you the configuration settings required. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - UI - - chromeless - - headless - - basic diff --git a/player/custom-adaptation/info.yaml b/player/custom-adaptation/info.yaml deleted file mode 100644 index 062cf291..00000000 --- a/player/custom-adaptation/info.yaml +++ /dev/null @@ -1,21 +0,0 @@ -title: Custom Adaptation -description: Showcasing the player's ability to switch between bitrates to avoid re-buffering, minimize startup time, and provide the best possible quality -long_descripition: The adaptation logic in the player is the key to avoiding buffering and minimizing startup time. Custom adaptation gives you complete control over your player. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - adaptation logic - - adaption - - bitrate - - quality-switching - -priority: 800 diff --git a/player/custom-quality-labels/info.yaml b/player/custom-quality-labels/info.yaml deleted file mode 100644 index c196d81e..00000000 --- a/player/custom-quality-labels/info.yaml +++ /dev/null @@ -1,16 +0,0 @@ -title: Custom Quality Labels -description: Customize video quality labels -long_description: To be defined. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - -tags: - - To be defined diff --git a/player/drm/info.yaml b/player/drm/info.yaml deleted file mode 100644 index b4270050..00000000 --- a/player/drm/info.yaml +++ /dev/null @@ -1,20 +0,0 @@ -title: DRM stream test -description: Test your protected DRM stream with the Bitmovin Player -long_description: Test your protected DRM stream live with the Bitmovin Player and get immediate insights into which DRM system and codecs are supported by your browser. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - drm - - widevine - - playready - -priority: 880 diff --git a/player/frame-accurate-seeking/README.md b/player/frame-accurate-seeking/README.md index bebdabf1..4bd91ab4 100644 --- a/player/frame-accurate-seeking/README.md +++ b/player/frame-accurate-seeking/README.md @@ -5,4 +5,4 @@ Test long description. ### Tags - - TestTag \ No newline at end of file + - seek \ No newline at end of file diff --git a/player/frame-accurate-seeking/info.yaml b/player/frame-accurate-seeking/info.yaml deleted file mode 100644 index cabde891..00000000 --- a/player/frame-accurate-seeking/info.yaml +++ /dev/null @@ -1,10 +0,0 @@ -title: Frame Accurate Seeking -description: Enable users to quickly scan and find the exact scene or frame they're looking for -long_description: Test long description. - -executable: - executable: true - indexfile: index.html - -tags: - - TestTag diff --git a/player/hls-fmp4/info.yaml b/player/hls-fmp4/info.yaml deleted file mode 100644 index ce5308c8..00000000 --- a/player/hls-fmp4/info.yaml +++ /dev/null @@ -1,20 +0,0 @@ -title: HLS fragmented MP4 -description: The Bitmovin Player fully supports fragmented MP4 in HLS -long_description: This demo showcases HLS content using fragmented MP4 (fMP4) being played by the Bitmovin Player, bringing you the advantage of reducing storage cost. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - fMP4 - - fragmented - - MP4 - - HLS - - basic diff --git a/player/low-latency-streaming/README.md b/player/low-latency-streaming/README.md index 54db0655..8d0a594a 100644 --- a/player/low-latency-streaming/README.md +++ b/player/low-latency-streaming/README.md @@ -1,7 +1,7 @@ # Low Latency Streaming Reduce latency during live streaming events and increase fan engagement -reduce latency from 30 seconds to 2 seconds,available on Web and Mobile platforms,monitor playback performance with Bitmovin Analytics +reduce latency from 30 seconds to 5 seconds,available on Web and Mobile platforms,monitor playback performance with Bitmovin Analytics ### Tags diff --git a/player/low-latency-streaming/info.yaml b/player/low-latency-streaming/info.yaml deleted file mode 100644 index 9b55a9a6..00000000 --- a/player/low-latency-streaming/info.yaml +++ /dev/null @@ -1,16 +0,0 @@ -title: Low Latency Streaming -description: Reduce latency during live streaming events and increase fan engagement -long_description: - - reduce latency from 30 seconds to 2 seconds - - available on Web and Mobile platforms - - monitor playback performance with Bitmovin Analytics - -executable: - executable: true - indexfile: index.html - -tags: - - Cmaf low latency - - live latency - -priority: 890 diff --git a/player/modular-player/info.yaml b/player/modular-player/info.yaml deleted file mode 100644 index 4bf9a91b..00000000 --- a/player/modular-player/info.yaml +++ /dev/null @@ -1,15 +0,0 @@ -title: Modular Player -description: Modular approach improves Bitmovin Player speed -long_description: The Bitmovin Player is a modular player, so you dramatically can reduce the file size and speed up your pages by just using what you need. - -executable: - executable: true - indexfile: index.html - -tags: - - modular - - reduce size - -priority: 960 - -hide_github_link: true diff --git a/player/multi-audio-tracks/info.yaml b/player/multi-audio-tracks/info.yaml deleted file mode 100644 index c734c3b8..00000000 --- a/player/multi-audio-tracks/info.yaml +++ /dev/null @@ -1,20 +0,0 @@ -title: Multiple Audio Tracks & Multiple Subtitles -description: Display multi language and audio options available with the Bitmovin player -long_description: Bitmovin supports multiple audio/language tracks, without the need of duplication or repackaging the video, either for live or on-demand content. Try the demo. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - -tags: - - multi - - audio - - language - - basic - - subtitle diff --git a/player/native-sdks/info.yaml b/player/native-sdks/info.yaml deleted file mode 100644 index 0a00e0f0..00000000 --- a/player/native-sdks/info.yaml +++ /dev/null @@ -1,45 +0,0 @@ -title: Native Player SDKs -description: Deliver High Quality Video Everywhere with Bitmovin's Native Player SDKs -long_description: Bitmovin’s Native SDKs give you everything you need to get your video playing anywhere, any device, any platform. - -executable: - executable: true - indexfile: index.html - -hide_github_link: true - -buttons: - - name: native-sdks-player-ios-samples - text: See iOS Samples - url: https://github.com/bitmovin/bitmovin-player-ios-samples - icon: apple - - name: native-sdks-player-android-samples - text: See Android Samples - url: https://github.com/bitmovin/bitmovin-player-android-samples - icon: android - -tags: - - native - - sdks - - sdk - - os - - apple - - google - - samsung - - lg - - amazon - - fire - - roku - - playstation - - andriod - - ios - - mac - - macos - - smart - - tv - - opera - - chrome - - firefox - - edge - - sfari - - internet explorer diff --git a/player/overlay-ad/info.yaml b/player/overlay-ad/info.yaml deleted file mode 100644 index e2327c48..00000000 --- a/player/overlay-ad/info.yaml +++ /dev/null @@ -1,21 +0,0 @@ -title: Overlay Ad -description: Enable static ads in the video player -long_description: To be defined. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - -tags: - - advertisement - - overlay - - VAST - - VPAID - -priority: 850 diff --git a/player/picture-in-picture/info.yaml b/player/picture-in-picture/info.yaml deleted file mode 100644 index 3a2bf626..00000000 --- a/player/picture-in-picture/info.yaml +++ /dev/null @@ -1,23 +0,0 @@ -title: Picture in Picture -description: Showcases the ability to keep a minimized player in the corner of your screen when you scroll too far -long_description: Picture in picture is a great feature for screens with more content than just the video, or screens with multiple videos. See it in action here. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - - scrollListener.js - - magic.css - -tags: - - picture - - mini - - advanced - - PiP - - sticky - diff --git a/player/player-ui-styling/README.md b/player/player-ui-styling/README.md index 11fa8143..ed5d5123 100644 --- a/player/player-ui-styling/README.md +++ b/player/player-ui-styling/README.md @@ -1,10 +1,10 @@ -# UI Styling - -Learn how you can entirely control the styling of the player UI -A unified UI config ensures that your player will look the same, regardless of which device or platform it is rendered on. Try the interactive demo. - -### Tags +# UI Styling + +Learn how you can entirely control the styling of the player UI +A unified UI config ensures that your player will look the same, regardless of which device or platform it is rendered on. Try the interactive demo. + +### Tags - styling - css - - UI + - UI \ No newline at end of file diff --git a/player/player-ui-styling/info.yaml b/player/player-ui-styling/info.yaml deleted file mode 100644 index 034fd8b0..00000000 --- a/player/player-ui-styling/info.yaml +++ /dev/null @@ -1,20 +0,0 @@ -title: UI Styling -description: Learn how you can entirely control the styling of the player UI -long_description: A unified UI config ensures that your player will look the same, regardless of which device or platform it is rendered on. Try the interactive demo. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - playerManaged.js - - externallyManaged.js - - cssOverloading.js - -tags: - - styling - - css - - UI diff --git a/player/preload-vod/info.yaml b/player/preload-vod/info.yaml deleted file mode 100644 index fc1577ae..00000000 --- a/player/preload-vod/info.yaml +++ /dev/null @@ -1,17 +0,0 @@ -title: Preload VoD -description: Enable users to instantly start watching their content without buffering or waiting -long_description: To be defined. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - -tags: - - preload - - vod diff --git a/player/ssai/info.yaml b/player/ssai/info.yaml deleted file mode 100644 index 85c26fa2..00000000 --- a/player/ssai/info.yaml +++ /dev/null @@ -1,21 +0,0 @@ -title: Server Side Ad Insertion -description: A demo of how you can use server side ad insertion with the player -long_description: Ad Blocking software has had a major impact on ad revenue across the entire video industry. Server-Side Ad Insertion offers a way to bypass Ad Blockers. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - advertissement - - server side - - ssai - - ads - -priority: 840 diff --git a/player/stream-test/info.yaml b/player/stream-test/info.yaml deleted file mode 100644 index fc91d8d5..00000000 --- a/player/stream-test/info.yaml +++ /dev/null @@ -1,21 +0,0 @@ -title: DASH, HLS or PROGRESSIVE stream test -description: Test your own stream with the Bitmovin Player -long_description: Simply paste the link to your video file to test your own stream with the Bitmovin Player. Playback in any browser and any device, fast start up, no buffering. - -executable: - executable: true - indexfile: index.html - -code: - show_code: false - language: js - -tags: - - dash - - hls - - stream - - basic - - test - - player - -priority: 100 diff --git a/player/thumbnail-seeking/info.yaml b/player/thumbnail-seeking/info.yaml deleted file mode 100644 index 8b1cf2bf..00000000 --- a/player/thumbnail-seeking/info.yaml +++ /dev/null @@ -1,20 +0,0 @@ -title: Thumbnail seeking -description: Display thumbnails over the seek bar to show a preview of the video at seeked time -long_description: Display thumbnails over the seek bar to show a preview of the video as the timeline is moved. This Bitmovin Player demonstration includes a working thumbnail demo. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - setup.js - - tracks.js - -tags: - - thumbnail - - seek - - preview - - basic diff --git a/player/variable-playback-speed/info.yaml b/player/variable-playback-speed/info.yaml deleted file mode 100644 index 52f0f9bc..00000000 --- a/player/variable-playback-speed/info.yaml +++ /dev/null @@ -1,17 +0,0 @@ -title: Variable Playback Speed -description: Change the playback speed of content -long_description: Bitmovin Player gives you the option to control the playback speed. This can be useful for many applications. Try the demo. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - playback speed - - dynamic diff --git a/player/vr-360/info.yaml b/player/vr-360/info.yaml deleted file mode 100644 index 3a650738..00000000 --- a/player/vr-360/info.yaml +++ /dev/null @@ -1,20 +0,0 @@ -title: VR & 360° -description: This demo shows the Bitmovin Player displaying a 360° video with VR -long_description: The Bitmovin Player was the first player on the market to achieve complete cross browser compatibility, and is still leading the way in features and performance. - -executable: - executable: true - indexfile: index.html - -code: - show_code: true - language: js - files: - - demo.js - -tags: - - VR - - 360 - - 3D - -priority: 780 diff --git a/scripts/checkYamlAndReadme.js b/scripts/checkJsonAndReadme.js similarity index 86% rename from scripts/checkYamlAndReadme.js rename to scripts/checkJsonAndReadme.js index e8d32c01..cb5b1029 100644 --- a/scripts/checkYamlAndReadme.js +++ b/scripts/checkJsonAndReadme.js @@ -22,12 +22,12 @@ const folderWalk = (folderPath) => { }; const addFileAndFolderPaths = (folderPath) => { - if (fs.statSync(folderPath).isDirectory() && fs.existsSync(path.join(folderPath, 'info.yaml')) && !fs.existsSync(path.join(folderPath, 'README.md'))) { + if (fs.statSync(folderPath).isDirectory() && fs.existsSync(path.join(folderPath, 'info.json')) && !fs.existsSync(path.join(folderPath, 'README.md'))) { console.error(`README file does not exist in folder: ${folderPath}!`); process.exit(1); } - else if (fs.statSync(folderPath).isDirectory() && !fs.existsSync(path.join(folderPath, 'info.yaml')) && fs.existsSync(path.join(folderPath, 'README.md'))) { - console.error(`Yaml file does not exist in folder: ${folderPath}!`); + else if (fs.statSync(folderPath).isDirectory() && !fs.existsSync(path.join(folderPath, 'info.json')) && fs.existsSync(path.join(folderPath, 'README.md'))) { + console.error(`info.json file does not exist in folder: ${folderPath}!`); process.exit(1); } else if (fs.statSync(folderPath).isDirectory()) { diff --git a/scripts/yamlToReadmeConverter.js b/scripts/jsonToReadmeConverter.js similarity index 63% rename from scripts/yamlToReadmeConverter.js rename to scripts/jsonToReadmeConverter.js index 92df9b00..b9a4acd7 100644 --- a/scripts/yamlToReadmeConverter.js +++ b/scripts/jsonToReadmeConverter.js @@ -1,6 +1,5 @@ const fs = require('fs'); const path = require('path'); -const YAML = require('yamljs'); const folderPaths = []; const filePaths = []; @@ -25,8 +24,8 @@ const folderWalk = (folderPath) => { }; const addFileAndFolderPaths = (folderPath) => { - if (fs.statSync(folderPath).isDirectory() && fs.existsSync(path.join(folderPath, 'info.yaml'))) { - const addFilePath = path.join(folderPath, 'info.yaml'); + if (fs.statSync(folderPath).isDirectory() && fs.existsSync(path.join(folderPath, 'info.json'))) { + const addFilePath = path.join(folderPath, 'info.json'); folderPaths.push(folderPath); filePaths.push(addFilePath); } @@ -34,7 +33,7 @@ const addFileAndFolderPaths = (folderPath) => { folderWalk(folderPath); } else { - console.error(`Yaml file does not exist in folder: ${folderPath}!`); + console.error(`info.json file does not exist in folder: ${folderPath}!`); process.exit(1); } }; @@ -48,30 +47,30 @@ const parseTags = (tags) => { }; const createReadme = (filePath, index) => { - YAML.load(filePath, (result) => { - const mapObj = { - '{{title}}': result.title, - '{{description}}': result.description, - '{{long_description}}': result.long_description - } + const fileContents = fs.readFileSync(filePath); + const result = JSON.parse(fileContents); + const mapObj = { + '{{title}}': result.title, + '{{description}}': result.description, + '{{long_description}}': result.long_description + } + + fs.readFile('./readmeTemplate.txt', 'utf8', (error, data) => { + if (error) { + console.error(error); + process.exit(1); + }; + const readmePath = folderPaths[index] + '/README.md'; - fs.readFile('./readmeTemplate.txt', 'utf8', (error, data) => { + const readmeResult = data.replace(/{{title}}|{{description}}|{{long_description}}/gi, (matched) => { + return mapObj[matched]; + }) + parseTags(result.tags); + + fs.writeFile(readmePath, readmeResult, (error) => { if (error) { console.error(error); process.exit(1); }; - const readmePath = folderPaths[index] + '/README.md'; - - const readmeResult = data.replace(/{{title}}|{{description}}|{{long_description}}/gi, (matched) => { - return mapObj[matched]; - }) + parseTags(result.tags); - - fs.writeFile(readmePath, readmeResult, (error) => { - if (error) { - console.error(error); - process.exit(1); - }; - }) }) }) };