
Listening to SCTE-EMSG Events
This sample catches and displays SCTE-35 events embedded inside EMSG boxes. The live sample stream being used contains embedded events at 10s and 40s in to each minute of media time.
Source code
<script>
var player;
const mpd = "https://livesim2.dashif.org/livesim2/scte35_2/testpic_2s/Manifest.mpd";
const SCHEMEIDURI = "urn:scte:scte35:2013:bin";
const EVENT_MODE_ON_START = dashjs.MediaPlayer.events.EVENT_MODE_ON_START;
const EVENT_MODE_ON_RECEIVE = dashjs.MediaPlayer.events.EVENT_MODE_ON_RECEIVE;
function init() {
player = dashjs.MediaPlayer().create();
player.updateSettings({ 'debug': { 'logLevel': dashjs.Debug.LOG_LEVEL_DEBUG }});
player.on(SCHEMEIDURI, showStartEvent, null); /* Default mode is onStart, no need to specify a mode */
player.on(SCHEMEIDURI, showReceiveEvent, null, { mode: EVENT_MODE_ON_RECEIVE });
player.initialize(document.querySelector("video"), mpd, true);
}
function showStartEvent(e) {
showEvent(e, "start");
}
function showReceiveEvent(e) {
showEvent(e, "receive");
}
function showEvent(e, output) {
/* We double process in order to pretty-print. Only two levels of object properties are exposed. */
for (var name in e) {
if (typeof e[name] != 'object') {
log(" " + name + ": " + e[name], output);
}
}
for (name in e) {
if (typeof e[name] == 'object' ) {
log(" " + name + ":", output);
for (name2 in e[name]) {
log(" " + name2 + ": " + JSON.stringify(e[name][name2]), output);
}
}
}
log("", output);
}
function log(msg, output) {
msg = msg.length > 200 ? msg.substring(0, 200) + "..." : msg; /* to avoid repeated wrapping with large objects */
var tracePanel = document.getElementById(output);
tracePanel.innerHTML += msg + "\n";
tracePanel.scrollTop = tracePanel.scrollHeight;
console.log(msg);
}
</script>