Table of contents
Events
dash.js supports inline and inband events included in the MPD and the media segments. For more details on events, their timing and how to use them please checkout ISO/IEC 23009-1 and the DASH-IF IOP Guidelines.
Example
An example is available as part of the sample section.
Inband Events
Inband events are events that are included in the ISOBMFF segments as an emsg box. The schemeIdUri and the value of inband events need to be signaled in the MPD using an InbandEventStream element.
An example of an InbandEventStream element and the structure of the emsg box are depicted below:
<InbandEventStream schemeIdUri="urn:scte:scte35:2013:xml" value="999"/>
aligned(8) class DASHEventMessageBox extends FullBox('emsg', version, flags=0){
if (version==0) {
string scheme_id_uri;
string value;
unsigned int(32) timescale;
unsigned int(32) presentation_time_delta;
unsigned int(32) event_duration;
unsigned int(32) id;
}
else if (version==1) {
unsigned int(32) timescale;
unsigned int(64) presentation_time;
unsigned int(32) event_duration;
unsigned int(32) id;
string scheme_id_uri;
string value;
}
unsigned int(8) message_data[];
MPD events
MPD events are signaled directly in the MPD. Events of the same type are summarized in an EventStream element. An example of an MPD event is depicted below.
<EventStream schemeIdUri="urn:scte:scte35:2013:xml" value="999">
<Event duration="1" presentationTime="10">someMessage</Event>
</EventStream>
dash.js event handling
Application events
dash.js dispatches events that are not directly processed by the player (application events) to the underlying application. To register for a specific type of event use the on method of the player object and specify the target schemeIdUri to listen for:
const SCHEMEIDURI = "urn:scte:scte35:2013:xml";
const EVENT_MODE_ON_START = dashjs.MediaPlayer.events.EVENT_MODE_ON_START;
const EVENT_MODE_ON_RECEIVE = dashjs.MediaPlayer.events.EVENT_MODE_ON_RECEIVE;
player.on(SCHEMEIDURI, showStartEvent, null);
player.on(SCHEMEIDURI, showReceiveEvent, null, { mode: EVENT_MODE_ON_RECEIVE });
Two dispatch modes are supported
eventModeOnStart(default): The event is dispatched once its start time is reached.eventModeOnReceive: The event is immediately dispatched once it was signaled to the dash.js player.
DASH-specific events
Some events are to be processed by the DASH player directly and are not dispatched to the application:
| schemeIdUri | value | Description |
|---|---|---|
urn:mpeg:dash:event:2012 | 1 | Triggers and MPD reload |
urn:mpeg:dash:event:callback:2015 | 1 | Sends a callback request to the provided URL ignoring the response |
ID3 parsing
dash.js uses the Common Media Library to support the parsing of ID3 time metadata for inband events. ID3 time metadata is signaled via the https://aomedia.org/emsg/ID3 schemeIdUri. The parsed message data is dispatched via the event.parsedMessageData field. The raw ID3 message data is available via the event.messageData field. As an example:
event.messageData = Uint8Array(89)[...]
event.parsedMessageData = [
{
"key": "PRIV",
"info": "com.elementaltechnologies.timestamp.utc",
"data": {}
}
]