{"id":14,"date":"2019-06-14T16:10:30","date_gmt":"2019-06-14T14:10:30","guid":{"rendered":"https:\/\/websites.fraunhofer.de\/video-dev\/?p=14"},"modified":"2019-08-22T09:48:47","modified_gmt":"2019-08-22T07:48:47","slug":"dash-js-how-to-use-dash-events","status":"publish","type":"post","link":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/","title":{"rendered":"dash.js: How to use DASH events"},"content":{"rendered":"\n<p>HTTP Live Streaming (HLS) and Dynamic Adaptive Streaming over HTTP (MPEG-DASH) are the two main formats for adaptive streaming. While HLS is natively supported on most of its target platforms, (iOS and MacOSX), MPEG-DASH requires external players. For browser-based environments, there are two great open-source options, namely&nbsp;<a href=\"https:\/\/github.com\/google\/shaka-player\">shaka-player<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/github.com\/Dash-Industry-Forum\/dash.js\">dash.js<\/a>.&nbsp; Both are written in JavaScript and use the MediaSourceExtensions (MSE) and EncryptedMediaExtensions (EME) to enable playback directly in the browser without the need for external plugins. Both offer a wide set of features and have an active community. Shaka-player is maintained and developed by Google, dash.js is the official reference player of the&nbsp;<a href=\"https:\/\/dashif.org\/\">DASH Industry Forum<\/a>.&nbsp;<\/p>\n\n\n\n<p>In this series of blog posts, we will focus on dash.js. I will explain how certain features are implemented and how they can be used within applications. To start off, we will focus on DASH events and how they can be used for features like metadata signaling and ad-insertion. But first, we need to clarify what DASH events are and how they work.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What are DASH events?<\/h3>\n\n\n\n<p>You can think of DASH events as a means for signalling additional information to the DASH client or the underlying application. Events are timed and therefore have a start time and duration. They can be a part of the manifest file or be embedded in the ISOBMFF-based media files, such as an EMSG box. For means of simplicity, we focus on the manifest variant. Let&#8217;s take a closer look at event-specific parts of such a manifest file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;EventStream schemeIdUri=\"urn:custom-data\" value=\"1\">\n  &lt;Event presentationTime=\"5\" duration=\"1\" id=\"1\">\n      Hello world\n   &lt;\/Event>\n  &lt;Event presentationTime=\"10\" duration=\"1\" id=\"2\">\n      Hello world 2\n   &lt;\/Event>\n&lt;\/EventStream><\/code><\/pre>\n\n\n\n<p>We introduce two new tags in our manifest file: the&nbsp;<em>&lt;EventStream&gt;<\/em>&nbsp;and <em>&lt;Event&gt;<\/em>&nbsp;element. Think of EventStreams as a container for a specific type of event. Each container has a&nbsp;<em>@schemeIdUri<\/em>&nbsp;which identifies the type of event and an optional&nbsp;<em>@value<\/em>&nbsp;to distinguish between events of the same type. Certain DASH-specific events with a reserved&nbsp;<em>@schemeIdUri<\/em>&nbsp;are directly processed by the DASH client and not dispatched to the underlying application.<br>Inside the&nbsp;<em>&lt;Eventstream&gt;<\/em>&nbsp;container, we can specify multiple events. In the example above, we defined two events. Each&nbsp;<em>&lt;Event&gt;<\/em>&nbsp;has a&nbsp;<em>@presentationTime<\/em>&nbsp;and a&nbsp;<em>@duration<\/em>. The presentation time is relative to the start of the parent &lt;<em>Period&gt;<\/em>&nbsp;element. Both <em>@presentationTime<\/em>&nbsp;and&nbsp;<em>@duration<\/em> should to be divided by the&nbsp;<em>@timescale<\/em>&nbsp;attribute in order to get their respective values in seconds. In our case, no&nbsp;<em>@timescale&nbsp;<\/em>is defined, so we can assume a default value of 1.&nbsp; The event payload is wrapped within the&nbsp;<em>&lt;Event&gt;<\/em>&nbsp;tags.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">DASH events in dash.js<\/h3>\n\n\n\n<p>In order to handle DASH events within the player, dash.js has a separate controller called&nbsp;<em>EventController.js<\/em>. Without going into too much detail, we can take a closer look at the part in which the events are actually dispatched:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (curr.eventStream.schemeIdUri == MPD_RELOAD_SCHEME &amp;&amp; curr.eventStream.value == MPD_RELOAD_VALUE) {\n   if (curr.duration !== 0 || curr.presentationTimeDelta !== 0) { \n      refreshManifest();\n   }\n } else {                           \n   eventBus.trigger(curr.eventStream.schemeIdUri, {event: curr});\n  }<\/code><\/pre>\n\n\n\n<p>DASH events with a schemeIdUri set to \u201curn:mpeg:dash:event:2012\u201d (MPD_RELOAD_SCHEME) and a value of \u201c1\u201d (MPD_RELOAD_VALUE) are directly processed by dash.js. In that case, an aperiodic MPD reload is triggered. In any other case, the event is dispatched to the underlying application using the internal event bus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to use DASH events in an application<\/h3>\n\n\n\n<p>Now that we know what DASH events are and how they are handled within dash.js, we can start using them. Let&#8217;s create a small application which shows the payload of our events in a &lt;div&gt; container below our video element. The corresponding index.html is very straight forward and looks like the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"en\">\n&lt;head>\n    &lt;meta charset=\"utf-8\"\/>\n    &lt;title>DASH events example&lt;\/title>\n        \n    &lt;style>\n        video {\n            width: 640px;\n            height: 360px;\n        }\n    &lt;\/style>\n&lt;\/head>\n&lt;body>\n&lt;div class=\"code\">\n    &lt;video controls=\"true\">\n    &lt;\/video>\n&lt;\/div>\n&lt;div >\n   Event output: &lt;span id=\"event-output\">&lt;\/span>   \n&lt;\/div>\n&lt;script>\n    document.addEventListener(\"DOMContentLoaded\", function () {\n        var app = new App();\n        app.init();\n    });\n&lt;\/script>\n&lt;script src=\"dash.all.debug.js\">&lt;\/script>\n&lt;script src=\"main.js\">&lt;\/script>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n\n\n\n<p>We simply add all of our dependencies and initialize our sample application. For the latter, we only need a few lines of code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var CUSTOM_EVENT_SCHEME = 'urn:custom-data';\n\nvar MPD_URL = 'events.mpd';\n\nvar App = function () {\n this.outputDiv = document.getElementById('event-output');\n};\n\nApp.prototype.init = function () {\n    this.video = document.querySelector(\"video\");\n    this.player = dashjs.MediaPlayer().create();\n    this.player.initialize(this.video, MPD_URL, true);\n    this.player.on(\n     CUSTOM_EVENT_SCHEME, this.customEventHandler.bind(this));\n};\n\nApp.prototype.customEventHandler = function (payload) {\n    this.outputDiv.innerText = payload.event.messageData;\n};<\/code><\/pre>\n\n\n\n<p>The crucial part is the last line of the init function in which we register for our custom events. The dash.js player will dispatch the events at the appropriate time and we output the content of the messageData attribute in the index.html. <\/p>\n\n\n\n<p>This concludes our small example on DASH events and how they are handled within dash.js Obviously, there are much more sophisticated use cases for those types of events. For example, a switch to an advertisement could be signaled. Morever, DASH events are great in providing additional information about current objects like buildings or an actor\/actress for the viewer.<\/p>\n\n\n\n<p>If you want to find out more about us and DASH, feel free to check out our website <a href=\"https:\/\/www.fokus.fraunhofer.de\/go\/dash\" onclick=\"wiredminds.trackEvent('TRACK-LINK: Link from:how-to-use-dash-events to:go-dash')\">https:\/\/www.fokus.fraunhofer.de\/go\/dash<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>HTTP Live Streaming (HLS) and Dynamic Adaptive Streaming over HTTP (MPEG-DASH) are the two main formats for adaptive streaming. While HLS is natively supported on most of its target platforms, (iOS and MacOSX), MPEG-DASH requires external players. For browser-based environments,&#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,5,4,2],"tags":[],"coauthors":[6],"class_list":["post-14","post","type-post","status-publish","format-standard","hentry","category-dash-js","category-encrypted-media-extensions","category-media-source-extensions","category-mpeg-dash"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>dash.js: How to use DASH events - Video-Dev<\/title>\n<meta name=\"description\" content=\"DASH events are used for features like metadata signaling and ad-insertion. In this blog post I explain how DASH events are handled within 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-how-to-use-dash-events\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"dash.js: How to use DASH events - Video-Dev\" \/>\n<meta property=\"og:description\" content=\"DASH events are used for features like metadata signaling and ad-insertion. In this blog post I explain how DASH events are handled within dash.js.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/\" \/>\n<meta property=\"og:site_name\" content=\"Video-Dev\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-14T14:10:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-22T07:48:47+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Silhavy\" \/>\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\" \/>\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-how-to-use-dash-events\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/\"},\"author\":{\"name\":\"Daniel Silhavy\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#\\\/schema\\\/person\\\/f7e1eee3cb4eae87a59648195014a809\"},\"headline\":\"dash.js: How to use DASH events\",\"datePublished\":\"2019-06-14T14:10:30+00:00\",\"dateModified\":\"2019-08-22T07:48:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/\"},\"wordCount\":774,\"commentCount\":0,\"articleSection\":[\"dash.js\",\"Encrypted Media Extensions\",\"Media Source Extensions\",\"MPEG-DASH\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/\",\"url\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/\",\"name\":\"dash.js: How to use DASH events - Video-Dev\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#website\"},\"datePublished\":\"2019-06-14T14:10:30+00:00\",\"dateModified\":\"2019-08-22T07:48:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/#\\\/schema\\\/person\\\/f7e1eee3cb4eae87a59648195014a809\"},\"description\":\"DASH events are used for features like metadata signaling and ad-insertion. In this blog post I explain how DASH events are handled within dash.js.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/dash-js-how-to-use-dash-events\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/websites.fraunhofer.de\\\/video-dev\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"dash.js: How to use DASH events\"}]},{\"@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: How to use DASH events - Video-Dev","description":"DASH events are used for features like metadata signaling and ad-insertion. In this blog post I explain how DASH events are handled within 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-how-to-use-dash-events\/","og_locale":"en_US","og_type":"article","og_title":"dash.js: How to use DASH events - Video-Dev","og_description":"DASH events are used for features like metadata signaling and ad-insertion. In this blog post I explain how DASH events are handled within dash.js.","og_url":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/","og_site_name":"Video-Dev","article_published_time":"2019-06-14T14:10:30+00:00","article_modified_time":"2019-08-22T07:48:47+00:00","author":"Daniel Silhavy","twitter_card":"summary_large_image","twitter_creator":"@dsilhavy","twitter_misc":{"Written by":"Daniel Silhavy","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/#article","isPartOf":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/"},"author":{"name":"Daniel Silhavy","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#\/schema\/person\/f7e1eee3cb4eae87a59648195014a809"},"headline":"dash.js: How to use DASH events","datePublished":"2019-06-14T14:10:30+00:00","dateModified":"2019-08-22T07:48:47+00:00","mainEntityOfPage":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/"},"wordCount":774,"commentCount":0,"articleSection":["dash.js","Encrypted Media Extensions","Media Source Extensions","MPEG-DASH"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/","url":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/","name":"dash.js: How to use DASH events - Video-Dev","isPartOf":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#website"},"datePublished":"2019-06-14T14:10:30+00:00","dateModified":"2019-08-22T07:48:47+00:00","author":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/#\/schema\/person\/f7e1eee3cb4eae87a59648195014a809"},"description":"DASH events are used for features like metadata signaling and ad-insertion. In this blog post I explain how DASH events are handled within dash.js.","breadcrumb":{"@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/websites.fraunhofer.de\/video-dev\/dash-js-how-to-use-dash-events\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/websites.fraunhofer.de\/video-dev\/"},{"@type":"ListItem","position":2,"name":"dash.js: How to use DASH events"}]},{"@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\/14","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=14"}],"version-history":[{"count":8,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"predecessor-version":[{"id":172,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/posts\/14\/revisions\/172"}],"wp:attachment":[{"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/tags?post=14"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/websites.fraunhofer.de\/video-dev\/wp-json\/wp\/v2\/coauthors?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}