Skip to content

Commit 5e0ba23

Browse files
committed
Ignore trick mode tracks
Issue #538 Change-Id: I47393ccdc189cf55b90e3a8e4239541e817618f9
1 parent 2d20164 commit 5e0ba23

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

lib/dash/dash_parser.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -695,8 +695,9 @@ shaka.dash.DashParser.prototype.parsePeriod_ = function(
695695

696696
var adaptationSetNodes =
697697
XmlUtils.findChildren(periodInfo.node, 'AdaptationSet');
698-
var adaptationSets =
699-
adaptationSetNodes.map(this.parseAdaptationSet_.bind(this, context));
698+
var adaptationSets = adaptationSetNodes
699+
.map(this.parseAdaptationSet_.bind(this, context))
700+
.filter(shaka.util.Functional.isNotNull);
700701

701702
if (adaptationSets.length == 0) {
702703
throw new shaka.util.Error(
@@ -722,7 +723,7 @@ shaka.dash.DashParser.prototype.parsePeriod_ = function(
722723
*
723724
* @param {shaka.dash.DashParser.Context} context
724725
* @param {!Element} elem The AdaptationSet element.
725-
* @return {shaka.dash.DashParser.AdaptationInfo}
726+
* @return {?shaka.dash.DashParser.AdaptationInfo}
726727
* @throws shaka.util.Error When there is a parsing error.
727728
* @private
728729
*/
@@ -773,6 +774,20 @@ shaka.dash.DashParser.prototype.parseAdaptationSet_ = function(context, elem) {
773774
}
774775
});
775776

777+
var essentialProperties = XmlUtils.findChildren(elem, 'EssentialProperty');
778+
// ID of real AdaptationSet if this is a trick mode set:
779+
var trickModeFor = null;
780+
essentialProperties.forEach(function(prop) {
781+
var schemeId = prop.getAttribute('schemeIdUri');
782+
if (schemeId == 'http://dashif.org/guidelines/trickmode') {
783+
trickModeFor = prop.getAttribute('value');
784+
}
785+
});
786+
if (trickModeFor != null) {
787+
// Ignore trick mode tracks until we support them fully.
788+
return null;
789+
}
790+
776791
var contentProtectionElems = XmlUtils.findChildren(elem, 'ContentProtection');
777792
var contentProtection = shaka.dash.ContentProtection.parseFromAdaptationSet(
778793
contentProtectionElems, this.config_.dash.customScheme);

test/dash/dash_parser_manifest_unit.js

+29
Original file line numberDiff line numberDiff line change
@@ -906,4 +906,33 @@ describe('DashParser.Manifest', function() {
906906
}).catch(fail).then(done);
907907
});
908908
});
909+
910+
it('ignores trickmode tracks', function(done) {
911+
var manifestText = [
912+
'<MPD minBufferTime="PT75S">',
913+
' <Period id="1" duration="PT30S">',
914+
' <AdaptationSet id="1">',
915+
' <Representation>',
916+
' <SegmentTemplate media="1.mp4" duration="1" />',
917+
' </Representation>',
918+
' </AdaptationSet>',
919+
' <AdaptationSet id="2">',
920+
' <EssentialProperty value="1" ',
921+
' schemeIdUri="http://dashif.org/guidelines/trickmode" />',
922+
' <Representation>',
923+
' <SegmentTemplate media="2.mp4" duration="1" />',
924+
' </Representation>',
925+
' </AdaptationSet>',
926+
' </Period>',
927+
'</MPD>'
928+
].join('\n');
929+
930+
fakeNetEngine.setResponseMapAsText({'dummy://foo': manifestText});
931+
parser.start('dummy://foo', fakeNetEngine, filterPeriod, fail, onEventSpy)
932+
.then(function(manifest) {
933+
expect(manifest.periods.length).toBe(1);
934+
expect(manifest.periods[0].streamSets.length).toBe(1);
935+
expect(manifest.periods[0].streamSets[0].streams.length).toBe(1);
936+
}).catch(fail).then(done);
937+
});
909938
});

0 commit comments

Comments
 (0)