{"id":222,"date":"2019-09-17T13:58:24","date_gmt":"2019-09-17T11:58:24","guid":{"rendered":"https:\/\/websites.fraunhofer.de\/video-dev\/?p=222"},"modified":"2019-09-19T16:59:43","modified_gmt":"2019-09-19T14:59:43","slug":"enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions","status":"publish","type":"post","link":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/","title":{"rendered":"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions"},"content":{"rendered":"\n<p>The <a href=\"https:\/\/www.w3.org\/TR\/media-source\/\">Media Source Extensions<\/a> (MSE) and <a href=\"https:\/\/www.w3.org\/TR\/encrypted-media\/\">Encrypted Media Extensions<\/a>&nbsp;(EME) are two APIs that enable playback of Digital Rights Management (DRM) protected adaptive streaming content in a browser. Both APIs are supported in all four major browsers: Chrome, Firefox, Edge and Safari. Recently, Google announced that Android devices directly support Widevine Hardware DRM in Chrome browsers:<\/p>\n\n\n\n<p><em>Chrome on Android is a Widevine L1 implementation as it leverages the built-in CDM on Android OS.<\/em><\/p>\n\n\n\n<p>Let&#8217;s take a closer look on the implications and how we can enable this feature.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">DRM Security Levels<\/h3>\n\n\n\n<p>Content owners and publishers have strong security requirements when it comes to content protection and potential content piracy. In order to be <em>allowed<\/em> to offer Ultra HD movies, providers need to guarantee a maximum level of&nbsp; protection. In terms of DRM, this means that the protectors themselves need to support a hardware-based DRM system. For Google&#8217;s Widevine DRM system, three different security levels are defined:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Security Level 1 (L1): complete processing is performed in a Trusted Execution Environment (TEE). This level refers to a hardware DRM.    <\/li><li>Security Level 2 (L2): cryptography is performed within the TEE. The video processing is done through separate video hardware or software. This level still refers to a hardware DRM.<\/li><li>Security Level 3 (L3): no TEE is present on the device. Decryption is typically performed directly in the browser. This level refers to a software DRM.<\/li><\/ul>\n\n\n\n<p>Coming back to our example of playing Ultra HD content, only devices with a security level of L1 are allowed to play such high quality content. So, how can we check whether an Android device supports a L1 Widevine DRM in Chrome or not?&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hardware DRM and EME &#8211; The theory<\/h3>\n\n\n\n<p>Whenever we are talking about playback in a browser, EME provides the necessary functions in order to communicate with the underlying DRM system on the device. The <em>requestMediaKeySystemAccess<\/em>&nbsp;function of the EME is used to detect which DRM systems are available, along with its supported configurations. The EME defines five different levels which can  directly be mapped to its respective Widevine security level. <\/p>\n\n\n<span id=\"tablepress-1-description\" class=\"tablepress-table-description tablepress-table-description-id-1\">Source: https:\/\/docs.microsoft.com\/en-us\/azure\/media-services\/previous\/offline-widevine-for-android<\/span>\n\n<table id=\"tablepress-1\" class=\"tablepress tablepress-id-1\" aria-describedby=\"tablepress-1-description\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">EME Level<\/th><th class=\"column-2\">Robustness Level<\/th><th class=\"column-3\">Widevine Security Level<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">1<\/td><td class=\"column-2\">SW_SECURE_CRYPTO<\/td><td class=\"column-3\">3<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">2<\/td><td class=\"column-2\">SW_SECURE_DECODE<\/td><td class=\"column-3\">3<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">3<\/td><td class=\"column-2\">HW_SECURE_CRYPTO<\/td><td class=\"column-3\">2<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">4<\/td><td class=\"column-2\">HW_SECURE_DECODE<\/td><td class=\"column-3\">1<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">5<\/td><td class=\"column-2\">HW_SECURE_ALL<\/td><td class=\"column-3\">1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-1 from cache -->\n\n\n\n<p>Unfortunately, the mapping of EME to Widevine security levels is a bit confusing. For example, EME level 1 maps to a Widevine security level of 3. In order to avoid any confusion, it is highly recommended to always specify the level type (either EME or Widevine).<\/p>\n\n\n\n<p>The EME level is not specified directly in the&nbsp;<em>requestMediaKeySystemAccess<\/em> call. Instead, the&nbsp;<em>robustness level<\/em>&nbsp;parameter is used. The complete invocation of the initial EME call includes a configuration array that combines all required parameters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> navigator.requestMediaKeySystemAccess(data.systemString, config)\n        .then(function (mediaKeySystemAccess) {\n        \/\/ Do something afterwards\n        })\n        .catch(function (e) {\n        \/\/ Ups this configuration is not supported\n        });<\/code><\/pre>\n\n\n\n<p>Typically, not only is the video track encrypted, but the audio track as well. Widevine recommends using different encryption keys for both tracks. Additionally, video tracks are much more valuable and as a result,<strong> <\/strong>platforms only support Widevine L3 audio tracks. Following that, a sample configuration for the&nbsp;<em>requestMediaKeySystemAccess<\/em>&nbsp;call can have the following values:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const config = [\n  {\n    \"initDataTypes\": [\n      \"cenc\"\n    ],\n    \"persistentState\": \"optional\",\n    \"distinctiveIdentifier\": \"optional\",\n    \"sessionTypes\": [\n      \"temporary\"\n    ],\n    \"audioCapabilities\": [\n      {\n        \"robustness\": \"SW_SECURE_CRYPTO\",\n        \"contentType\": \"audio\/mp4;codecs=\"mp4a.40.2\"\"\n      }\n    ],\n    \"videoCapabilities\": [\n      {\n        \"robustness\": \"HW_SECURE_ALL\",\n        \"contentType\": \"video\/mp4;codecs=\"avc1.42800C\"\"\n      }\n    ]\n  }\n]<\/code><\/pre>\n\n\n\n<p>In this example, the video track requires at least a Widevine level 1 DRM, while audio only needs level 3.&nbsp;One thing to keep in mind, is that changing parameters like persistentState, distinctiveIdentifier or the contentType have a significant influence on the result of the call. The underlying CDM may reject the configuration if one of these settings is not supported, regardless of Hardware DRM support or not. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hardware DRM and EME &#8211; Practical tests<\/h3>\n\n\n\n<p>Now that we covered all theories, let&#8217;s see if this really works. In our tests, we used a Samsung Galaxy S9 with Android 9 and Chrome 75.0.3770.101, and a HTC OnePlus 5T with Android 8.1 and Chrome 75.0.3770.101.<\/p>\n\n\n\n<p>Good news first: with the configuration described above, the promise returned by the<em> requestMediaKeysSystemAccessCall<\/em> is successfully resolved on both devices. Unfortunately, this does not necessarily mean that our device really supports Hardware DRM. On one of our test devices, we encountered an error when trying to create the MediaKeys afterwards. So, whenever we are checking if our device supports a Hardware DRM or not, we need to check for MediaKeys as well. This leaves us with the following code: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        navigator\n          .requestMediaKeySystemAccess(keySystem, config)\n          .then((keySystemAccess) => {\n            return keySystemAccess.createMediaKeys();\n          })\n          .then(() => {\n            \/\/ yay it works\n          })\n          .catch((e) => {\n            \/\/ no UHD on this device :(\n          });<\/code><\/pre>\n\n\n\n<p>That concludes our dive into the world of Hardware DRM and EME. If you want to find out more about our DRM activities, feel free to check out our <a href=\"https:\/\/www.fokus.fraunhofer.de\/go\/drm\" onclick=\"wiredminds.trackEvent('TRACK-LINK: Link from:hardware-drm to:go-drm')\">website.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Media Source Extensions (MSE) and Encrypted Media Extensions&nbsp;(EME) are two APIs that enable playback of Digital Rights Management (DRM) protected adaptive streaming content in a browser. Both APIs are supported in all four major browsers: Chrome, Firefox, Edge and&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,5,2,10],"tags":[],"coauthors":[6,15],"class_list":["post-222","post","type-post","status-publish","format-standard","hentry","category-drm","category-encrypted-media-extensions","category-mpeg-dash","category-widevine"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions - Video-Dev<\/title>\n<meta name=\"description\" content=\"How to enable playback of L1 protected Widevine content on Android Chrome.\" \/>\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\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions - Video-Dev\" \/>\n<meta property=\"og:description\" content=\"How to enable playback of L1 protected Widevine content on Android Chrome.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/\" \/>\n<meta property=\"og:site_name\" content=\"Video-Dev\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-17T11:58:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-09-19T14:59:43+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Silhavy, Stefan Pham\" \/>\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, Stefan Pham\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 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\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/\"},\"author\":{\"name\":\"Daniel Silhavy\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#\\\/schema\\\/person\\\/f7e1eee3cb4eae87a59648195014a809\"},\"headline\":\"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions\",\"datePublished\":\"2019-09-17T11:58:24+00:00\",\"dateModified\":\"2019-09-19T14:59:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/\"},\"wordCount\":720,\"commentCount\":0,\"articleSection\":[\"DRM\",\"Encrypted Media Extensions\",\"MPEG-DASH\",\"Widevine\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/\",\"url\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/\",\"name\":\"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions - Video-Dev\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#website\"},\"datePublished\":\"2019-09-17T11:58:24+00:00\",\"dateModified\":\"2019-09-19T14:59:43+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#\\\/schema\\\/person\\\/f7e1eee3cb4eae87a59648195014a809\"},\"description\":\"How to enable playback of L1 protected Widevine content on Android Chrome.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions\"}]},{\"@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":"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions - Video-Dev","description":"How to enable playback of L1 protected Widevine content on Android Chrome.","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\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/","og_locale":"en_US","og_type":"article","og_title":"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions - Video-Dev","og_description":"How to enable playback of L1 protected Widevine content on Android Chrome.","og_url":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/","og_site_name":"Video-Dev","article_published_time":"2019-09-17T11:58:24+00:00","article_modified_time":"2019-09-19T14:59:43+00:00","author":"Daniel Silhavy, Stefan Pham","twitter_card":"summary_large_image","twitter_creator":"@dsilhavy","twitter_misc":{"Written by":"Daniel Silhavy, Stefan Pham","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/#article","isPartOf":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/"},"author":{"name":"Daniel Silhavy","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#\/schema\/person\/f7e1eee3cb4eae87a59648195014a809"},"headline":"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions","datePublished":"2019-09-17T11:58:24+00:00","dateModified":"2019-09-19T14:59:43+00:00","mainEntityOfPage":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/"},"wordCount":720,"commentCount":0,"articleSection":["DRM","Encrypted Media Extensions","MPEG-DASH","Widevine"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/","url":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/","name":"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions - Video-Dev","isPartOf":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#website"},"datePublished":"2019-09-17T11:58:24+00:00","dateModified":"2019-09-19T14:59:43+00:00","author":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#\/schema\/person\/f7e1eee3cb4eae87a59648195014a809"},"description":"How to enable playback of L1 protected Widevine content on Android Chrome.","breadcrumb":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/enabling-hardware-drm-on-android-chrome-using-the-encrypted-media-extensions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/websites.fraunhofer.de\/video-dev\/"},{"@type":"ListItem","position":2,"name":"Enabling Hardware DRM on Android Chrome using the Encrypted Media Extensions"}]},{"@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\/222","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=222"}],"version-history":[{"count":30,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts\/222\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts\/222\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/media?parent=222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/categories?post=222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/tags?post=222"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/coauthors?post=222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}