{"id":1475,"date":"2023-02-23T14:34:24","date_gmt":"2023-02-23T13:34:24","guid":{"rendered":"https:\/\/websites.fraunhofer.de\/video-dev\/?p=1475"},"modified":"2023-02-23T14:34:26","modified_gmt":"2023-02-23T13:34:26","slug":"dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals","status":"publish","type":"post","link":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/","title":{"rendered":"dash.js &#8211; Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals"},"content":{"rendered":"\n<p>Back when I was still a student assistant and did my first steps in the media streaming industry, I had the chance to attend my first DASH-IF meetings. At this time, I was working on specific features to enable server and client-side ad-insertion in dash.js. While these new features (XLink, DASH events) were only really used much later, someone in the meeting said something that is still stuck in my head even after all these years: <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This has to work\u2014This is what pays our bills<\/p>\n<cite>A wise man<\/cite><\/blockquote>\n\n\n\n<p>And to be fair: With FAST channels popping up everywhere, the quote above is still true. So, here we go, let&#8217;s take a look at a new feature in dash.js: <strong>Segment preloading <\/strong>and how we can use it to enable <strong>broadcast-broadband ad-insertion on HbbTV terminals.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Broadcast-Broadband Ad-Insertion on HbbTV terminals<\/h2>\n\n\n\n<p>The idea behind broadcast-broadband ad-insertion aka dynamic ad substitution on HbbTV terminals is simple: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"270\" src=\"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-698x270.jpg\" alt=\"\" class=\"wp-image-1508\" srcset=\"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-698x270.jpg 698w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-400x155.jpg 400w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-768x297.jpg 768w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-1536x594.jpg 1536w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-2048x791.jpg 2048w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><figcaption class=\"wp-element-caption\">Dynamic Ad Substitution<\/figcaption><\/figure>\n\n\n\n<p>When a viewer turns on a broadcast channel, we start an HbbTV application in the background. At this point, the application is invisible to the user. Upcoming ad breaks in the broadcast stream are signaled via stream events in the transport stream to our application running in the background. That way we know exactly when an ad is to be started; typically, upcoming ad breaks are announced multiple seconds before they start. Using this information we can request a personalized broadband advertisement from an ad-server and pre-buffer it in our application. Once the ad is to be shown, we simply put our application into the foreground and play the broadband ad instead of the broadcast ad. Afterward, we switch back to the common broadcast feed.<\/p>\n\n\n\n<p>For playback of broadband ads in MPEG-DASH format, we have two options. We can either rely on native playback using a type-1 player or we use a type-3 player that utilizes W3C APIs such as the Media Source Extensions (MSE) and the Encrypted Media Extensions (EME, only required for playback of DRM protected content). Official support for the MSE was <a href=\"https:\/\/www.hbbtv.org\/wp-content\/uploads\/2020\/12\/HbbTV-203-webinar-2020-11-23.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">added in HbbTV version 2.0.3 <\/a>. However, a wide range of HbbTV terminals below version 2.0.3 already support the MSE enabling playback via type-3 players such as <a href=\"https:\/\/github.com\/Dash-Industry-Forum\/dash.js\" target=\"_blank\" rel=\"noreferrer noopener\">dash.js<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The technical challenges<\/h2>\n\n\n\n<p>While the basic idea of broadcast-broadband ad-insertion itself sounds simple, there are quite some technical challenges that we need to overcome:<\/p>\n\n\n\n<p>First we need to make sure that the upcoming ad breaks are signaled in advance. Our application needs enough time to contact the ad decisioning server and preload the ad, otherwise the transition between broadcast and broadband is not fluent.<\/p>\n\n\n\n<p>Next, moving the HbbTV app from the background to the foreground can take some time as well. While we will not discuss this in more detail here, keep in mind that devices behave differently. Careful testing is required to determine how long it takes to perform this transition.<\/p>\n\n\n\n<p>Finally, most of the HbbTV terminals only provide a single decoder, meaning that broadcast and broadband content share the same decoder. Typically, MSE based players such as dash.js download the manifest and the media segments and immediately append them to the corresponding Source Buffers. The underlying platform then starts decoding the media data. Consequently, we cannot append any media data to the source buffers before the broadcast part has been decoded completely. To overcome this challenge, we added a preload functionality to <a href=\"https:\/\/github.com\/Dash-Industry-Forum\/dash.js\/releases\/tag\/v4.6.0\" target=\"_blank\" rel=\"noreferrer noopener\">dash.js version 4.6.0<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preloading in dash.js<\/h2>\n\n\n\n<p>The idea of preloading segments is simple: The main logic for manifest fetching and parsing and downloading the media segments remains untouched. But instead of appending the segments to the Source Buffers we save them in a &#8220;virtual&#8221; buffer. Once the application decides to perform the transition from broadcast to broadband, we empty the virtual buffer and append the media data to the &#8220;real&#8221; buffers. That way we already have enough data to immediately start the playback, leading to significant improvements regarding the startup\/transition time. The simplified dash.js workflow is depicted in the sequence diagram below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"247\" src=\"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/sequence.drawio-698x247.png\" alt=\"\" class=\"wp-image-1485\" srcset=\"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/sequence.drawio-698x247.png 698w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/sequence.drawio-400x141.png 400w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/sequence.drawio-768x272.png 768w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/sequence.drawio-1536x543.png 1536w, https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/sequence.drawio.png 1742w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><figcaption class=\"wp-element-caption\">Preloading in dash.js<\/figcaption><\/figure>\n\n\n\n<p>The application calls the <code>preload()<\/code> function to trigger the manifest processing and the segment download. Once a segment has been downloaded, it is appended to a virtual buffer that we maintain within the <code>PreBufferSink<\/code>. To switch between the virtual buffer and the real buffer, the application calls the <code>attachView()<\/code> function, providing a reference to the video element.  As a result, the virtual buffer is emptied and the segments are appended to the corresponding Source Buffers. An example of the preload functionality in dash.js can be found in the sample section: <a href=\"https:\/\/reference.dashif.org\/dash.js\/nightly\/samples\/advanced\/preload.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/reference.dashif.org\/dash.js\/nightly\/samples\/advanced\/preload.html<\/a><\/p>\n\n\n\n<p>Application providers that use the preload functionality should pay close attention to the buffer targets of the player. Since the media segments are stored in the memory, there might be some memory restrictions that apply to specific platforms. dash.js offers various settings regarding the target buffer level, more information can be found in the sample section: <a href=\"https:\/\/reference.dashif.org\/dash.js\/nightly\/samples\/index.html#Buffer\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/reference.dashif.org\/dash.js\/nightly\/samples\/index.html#Buffer<\/a> <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Outlook<\/h2>\n\n\n\n<p>While the main reason for preloading segments into a virtual buffer originates from the aforementioned HbbTV broadcast-broadband ad-insertion use-case, there are additional scenarios in which preloading can be useful.  As an example, the transition from an unencrypted to an encrypted DASH period typically requires a reset of the MSE. By utilizing the preload functionality the transition time can be optimized. <\/p>\n\n\n\n<p>If you have any questions regarding our DASH and HbbTV activities or dash.js in particular, feel free to check out our&nbsp;<a href=\"https:\/\/www.fokus.fraunhofer.de\/go\/dash\" target=\"_blank\" rel=\"noreferrer noopener\">website<\/a>&nbsp;and contact us.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Back when I was still a student assistant and did my first steps in the media streaming industry, I had the chance to attend my first DASH-IF meetings. At this time, I was working on specific features to enable server&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,41,4,2],"tags":[],"coauthors":[6,22],"class_list":["post-1475","post","type-post","status-publish","format-standard","hentry","category-dash-js","category-hbbtv","category-media-source-extensions","category-mpeg-dash"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>dash.js - Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals - Video-Dev<\/title>\n<meta name=\"description\" content=\"Dynamic Ad Substitution on HbbTV terminals using dash.js\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"dash.js - Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals - Video-Dev\" \/>\n<meta property=\"og:description\" content=\"Dynamic Ad Substitution on HbbTV terminals using dash.js\" \/>\n<meta property=\"og:url\" content=\"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/\" \/>\n<meta property=\"og:site_name\" content=\"Video-Dev\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-23T13:34:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-23T13:34:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-698x270.jpg\" \/>\n<meta name=\"author\" content=\"Daniel Silhavy, Robert Seeliger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dsilhavy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Silhavy, Robert Seeliger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/\"},\"author\":{\"name\":\"Daniel Silhavy\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#\\\/schema\\\/person\\\/f7e1eee3cb4eae87a59648195014a809\"},\"headline\":\"dash.js &#8211; Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals\",\"datePublished\":\"2023-02-23T13:34:24+00:00\",\"dateModified\":\"2023-02-23T13:34:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/\"},\"wordCount\":943,\"commentCount\":2,\"image\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/dynamic_ad_substitution-698x270.jpg\",\"articleSection\":[\"dash.js\",\"HbbTV\",\"Media Source Extensions\",\"MPEG-DASH\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/\",\"url\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/\",\"name\":\"dash.js - Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals - Video-Dev\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/dynamic_ad_substitution-698x270.jpg\",\"datePublished\":\"2023-02-23T13:34:24+00:00\",\"dateModified\":\"2023-02-23T13:34:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#\\\/schema\\\/person\\\/f7e1eee3cb4eae87a59648195014a809\"},\"description\":\"Dynamic Ad Substitution on HbbTV terminals using dash.js\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#primaryimage\",\"url\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/dynamic_ad_substitution.jpg\",\"contentUrl\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/dynamic_ad_substitution.jpg\",\"width\":2334,\"height\":902},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"dash.js &#8211; Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#website\",\"url\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/\",\"name\":\"Video-Dev\",\"description\":\"Future Applications and Media - Video Development Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#\\\/schema\\\/person\\\/f7e1eee3cb4eae87a59648195014a809\",\"name\":\"Daniel Silhavy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/0-1-150x150.jpegccb13c1b60303228bf3c575f3345fe29\",\"url\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/0-1-150x150.jpeg\",\"contentUrl\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/0-1-150x150.jpeg\",\"caption\":\"Daniel Silhavy\"},\"description\":\"Daniel Silhavy studied Computer Science at the Technical University of Berlin (TUB). He received his Masters degree with the completion of his thesis \u201cAd Insertion in MPEG-DASH\u201d at Fraunhofer Institute for Open Communication Systems (FOKUS) in 2015. Currently, he is employed as a scientific assistant and project manager at the Business Unit Future Applications and Media (FAME). He specializes in the R&amp;D of topics dealing with IPTV and adaptive media streaming.\",\"sameAs\":[\"https:\\\/\\\/www.fokus.fraunhofer.de\\\/fame\\\/team\\\/silhavy\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/daniel-silhavy-21650a129\\\/\",\"https:\\\/\\\/x.com\\\/dsilhavy\"],\"url\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/author\\\/silhavy\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"dash.js - Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals - Video-Dev","description":"Dynamic Ad Substitution on HbbTV terminals using dash.js","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/","og_locale":"en_US","og_type":"article","og_title":"dash.js - Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals - Video-Dev","og_description":"Dynamic Ad Substitution on HbbTV terminals using dash.js","og_url":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/","og_site_name":"Video-Dev","article_published_time":"2023-02-23T13:34:24+00:00","article_modified_time":"2023-02-23T13:34:26+00:00","og_image":[{"url":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-698x270.jpg","type":"","width":"","height":""}],"author":"Daniel Silhavy, Robert Seeliger","twitter_card":"summary_large_image","twitter_creator":"@dsilhavy","twitter_misc":{"Written by":"Daniel Silhavy, Robert Seeliger","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#article","isPartOf":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/"},"author":{"name":"Daniel Silhavy","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#\/schema\/person\/f7e1eee3cb4eae87a59648195014a809"},"headline":"dash.js &#8211; Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals","datePublished":"2023-02-23T13:34:24+00:00","dateModified":"2023-02-23T13:34:26+00:00","mainEntityOfPage":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/"},"wordCount":943,"commentCount":2,"image":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#primaryimage"},"thumbnailUrl":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-698x270.jpg","articleSection":["dash.js","HbbTV","Media Source Extensions","MPEG-DASH"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/","url":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/","name":"dash.js - Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals - Video-Dev","isPartOf":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#website"},"primaryImageOfPage":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#primaryimage"},"image":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#primaryimage"},"thumbnailUrl":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution-698x270.jpg","datePublished":"2023-02-23T13:34:24+00:00","dateModified":"2023-02-23T13:34:26+00:00","author":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#\/schema\/person\/f7e1eee3cb4eae87a59648195014a809"},"description":"Dynamic Ad Substitution on HbbTV terminals using dash.js","breadcrumb":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#primaryimage","url":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution.jpg","contentUrl":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2023\/02\/dynamic_ad_substitution.jpg","width":2334,"height":902},{"@type":"BreadcrumbList","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-segment-preloading-for-seamless-broadcast-broadband-ad-insertion-on-hbbtv-terminals\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/websites.fraunhofer.de\/video-dev\/"},{"@type":"ListItem","position":2,"name":"dash.js &#8211; Segment preloading for seamless broadcast-broadband ad-insertion on HbbTV terminals"}]},{"@type":"WebSite","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#website","url":"https:\/\/websites.fraunhofer.de\/video-dev\/","name":"Video-Dev","description":"Future Applications and Media - Video Development Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/websites.fraunhofer.de\/video-dev\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#\/schema\/person\/f7e1eee3cb4eae87a59648195014a809","name":"Daniel Silhavy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2019\/11\/0-1-150x150.jpegccb13c1b60303228bf3c575f3345fe29","url":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2019\/11\/0-1-150x150.jpeg","contentUrl":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-content\/uploads\/2019\/11\/0-1-150x150.jpeg","caption":"Daniel Silhavy"},"description":"Daniel Silhavy studied Computer Science at the Technical University of Berlin (TUB). He received his Masters degree with the completion of his thesis \u201cAd Insertion in MPEG-DASH\u201d at Fraunhofer Institute for Open Communication Systems (FOKUS) in 2015. Currently, he is employed as a scientific assistant and project manager at the Business Unit Future Applications and Media (FAME). He specializes in the R&amp;D of topics dealing with IPTV and adaptive media streaming.","sameAs":["https:\/\/www.fokus.fraunhofer.de\/fame\/team\/silhavy","https:\/\/www.linkedin.com\/in\/daniel-silhavy-21650a129\/","https:\/\/x.com\/dsilhavy"],"url":"https:\/\/websites.fraunhofer.de\/video-dev\/author\/silhavy\/"}]}},"_links":{"self":[{"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts\/1475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/comments?post=1475"}],"version-history":[{"count":35,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts\/1475\/revisions"}],"predecessor-version":[{"id":1518,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts\/1475\/revisions\/1518"}],"wp:attachment":[{"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/media?parent=1475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/categories?post=1475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/tags?post=1475"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/coauthors?post=1475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}