From d184ac5446751c86e4488712e1cf503be5ade2fd Mon Sep 17 00:00:00 2001 From: sanbornhnewyyz Date: Tue, 7 Feb 2017 16:30:18 -0500 Subject: [PATCH] Don't ignore InbandEventStreams at the Representation level Closes #686 --- lib/dash/dash_parser.js | 28 +++++++- test/dash/dash_parser_manifest_unit.js | 88 +++++++++++++++++--------- 2 files changed, 85 insertions(+), 31 deletions(-) diff --git a/lib/dash/dash_parser.js b/lib/dash/dash_parser.js index 45c1da6e859..3bab1cc1d0e 100644 --- a/lib/dash/dash_parser.js +++ b/lib/dash/dash_parser.js @@ -904,8 +904,7 @@ shaka.dash.DashParser.prototype.parseAdaptationSet_ = function(context, elem) { // InbandEventStream indicates that a segment contains inband // information. - var eventStream = XmlUtils.findChild(elem, 'InbandEventStream'); - var containsInband = eventStream != null; + var containsInband = this.eventStreamIsPresent_(elem); var essentialProperties = XmlUtils.findChildren(elem, 'EssentialProperty'); // ID of real AdaptationSet if this is a trick mode set: @@ -991,6 +990,31 @@ shaka.dash.DashParser.prototype.parseAdaptationSet_ = function(context, elem) { }; +/** + * Indicates whether and InbandEventStream element is present at the Adaption + * Set or Representation level. + * + * @param {!Element} elem The AdaptationSet element. + * @return {boolean} Whether the InbandEventStream element if present. + * @private + */ +shaka.dash.DashParser.prototype.eventStreamIsPresent_ = function(elem) { + var XmlUtils = shaka.util.XmlUtils; + + var adaptationEventStream = XmlUtils.findChild(elem, 'InbandEventStream'); + var representation = XmlUtils.findChild(elem, 'Representation'); + + if (representation) { + var representationEventStream = + XmlUtils.findChild(representation, 'InbandEventStream'); + } + + var eventStream = adaptationEventStream || representationEventStream; + + return eventStream != null; +}; + + /** * Parses a Representation XML element. * diff --git a/test/dash/dash_parser_manifest_unit.js b/test/dash/dash_parser_manifest_unit.js index c5a970bbd03..55b901da1ba 100644 --- a/test/dash/dash_parser_manifest_unit.js +++ b/test/dash/dash_parser_manifest_unit.js @@ -751,35 +751,43 @@ describe('DashParser Manifest', function() { .then(done); }); - it('updates manifest when emsg box is present', function(done) { - var manifestText = [ - '', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - '' - ].join('\n'); - - fakeNetEngine.setResponseMapAsText({'dummy://foo': manifestText}); - parser.start('dummy://foo', playerInterface) - .then(function() { - expect(fakeNetEngine.registerResponseFilter).toHaveBeenCalled(); - var filter = - fakeNetEngine.registerResponseFilter.calls.mostRecent().args[0]; - var type = shaka.net.NetworkingEngine.RequestType.SEGMENT; - var response = {data: emsgUpdate.buffer}; - fakeNetEngine.request.calls.reset(); - filter(type, response); - expect(fakeNetEngine.request).toHaveBeenCalled(); - }) - .catch(fail) - .then(done); - }); + it('updates manifest when emsg box is present on AdaptationSet', + function(done) { + var manifestText = [ + '', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + '' + ].join('\n'); + + emsgBoxPresenceHelper(manifestText, emsgUpdate, done); + }); + + it('updates manifest when emsg box is present on Representation', + function(done) { + var manifestText = [ + '', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + '' + ].join('\n'); + + emsgBoxPresenceHelper(manifestText, emsgUpdate, done); + }); it('dispatches an event on non-typical emsg content', function(done) { var manifestText = [ @@ -969,4 +977,26 @@ describe('DashParser Manifest', function() { .catch(fail) .then(done); }); + + /** + * @param {string} manifestText + * @param {Uint8Array} emsgUpdate + * @param {Function} done + */ + function emsgBoxPresenceHelper(manifestText, emsgUpdate, done) { + fakeNetEngine.setResponseMapAsText({'dummy://foo': manifestText}); + parser.start('dummy://foo', playerInterface) + .then(function() { + expect(fakeNetEngine.registerResponseFilter).toHaveBeenCalled(); + var filter = + fakeNetEngine.registerResponseFilter.calls.mostRecent().args[0]; + var type = shaka.net.NetworkingEngine.RequestType.SEGMENT; + var response = {data: emsgUpdate.buffer}; + fakeNetEngine.request.calls.reset(); + filter(type, response); + expect(fakeNetEngine.request).toHaveBeenCalled(); + }) + .catch(fail) + .then(done); + } });