Skip to content

Commit

Permalink
Allow multiple EMSG boxes per segment.
Browse files Browse the repository at this point in the history
Closes #1340

Change-Id: I6e539ee54ca77f2069fd74c28f8e0d3ed870860f
  • Loading branch information
TheModMaker authored and joeyparrish committed Mar 21, 2018
1 parent e745432 commit 3abc94d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 27 deletions.
2 changes: 0 additions & 2 deletions lib/media/streaming_engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -1735,8 +1735,6 @@ shaka.media.StreamingEngine.prototype.parseEMSG_ = function(
var event = new shaka.util.FakeEvent('emsg', {'detail': emsg});
this.playerInterface_.onEvent(event);
}

box.parser.stop();
};


Expand Down
61 changes: 36 additions & 25 deletions test/media/streaming_engine_unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -2719,6 +2719,21 @@ describe('StreamingEngine', function() {
});

describe('embedded emsg boxes', function() {
const emsgSegment = Uint8ArrayUtils.fromHex(
'0000003b656d736700000000666f6f3a6261723a637573746f6d646174617363' +
'68656d6500310000000001000000080000ffff0000000174657374');
const emsgObj = {
startTime: 8,
endTime: 0xffff + 8,
schemeIdUri: 'foo:bar:customdatascheme',
value: '1',
timescale: 1,
presentationTimeDelta: 8,
eventDuration: 0xffff,
id: 1,
messageData: new Uint8Array([0x74, 0x65, 0x73, 0x74])
};

beforeEach(function() {
setupVod();
mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
Expand All @@ -2731,41 +2746,37 @@ describe('StreamingEngine', function() {

it('raises an event for embedded emsg boxes', function() {
videoStream1.containsEmsgBoxes = true;
segmentData[ContentType.VIDEO].segments[0] =
Uint8ArrayUtils.fromHex(
'0000003b656d736700000000666f6f3a' +
'6261723a637573746f6d646174617363' +
'68656d65003100000000010000000800' +
'00ffff0000000174657374').buffer;
segmentData[ContentType.VIDEO].segments[0] = emsgSegment.buffer;

// Here we go!
streamingEngine.init();
runTest();

expect(onEvent).toHaveBeenCalled();
expect(onEvent).toHaveBeenCalledTimes(1);

var event = onEvent.calls.argsFor(0)[0];
expect(event.detail).toEqual({
startTime: 8,
endTime: 0xffff + 8,
schemeIdUri: 'foo:bar:customdatascheme',
value: '1',
timescale: 1,
presentationTimeDelta: 8,
eventDuration: 0xffff,
id: 1,
messageData: new Uint8Array([116, 101, 115, 116])
});
let event = onEvent.calls.argsFor(0)[0];
expect(event.detail).toEqual(emsgObj);
});

it('raises multiple events', function() {
videoStream1.containsEmsgBoxes = true;

const dummyBox =
shaka.util.Uint8ArrayUtils.fromHex('0000000c6672656501020304');
segmentData[ContentType.VIDEO].segments[0] =
shaka.util.Uint8ArrayUtils.concat(emsgSegment, dummyBox, emsgSegment)
.buffer;

// Here we go!
streamingEngine.init();
runTest();

expect(onEvent).toHaveBeenCalledTimes(2);
});

it('won\'t raise an event without stream field set', function() {
videoStream1.containsEmsgBoxes = false;
segmentData[ContentType.VIDEO].segments[0] =
Uint8ArrayUtils.fromHex(
'0000003b656d736700000000666f6f3a' +
'6261723a637573746f6d646174617363' +
'68656d65003100000000010000000800' +
'00ffff0000000174657374').buffer;
segmentData[ContentType.VIDEO].segments[0] = emsgSegment.buffer;

// Here we go!
streamingEngine.init();
Expand Down

0 comments on commit 3abc94d

Please sign in to comment.