@@ -268,15 +268,19 @@ Mss.dependencies.MssParser = function() {
268268 mapSegmentTemplate = function ( streamIndex , timescale ) {
269269
270270 var segmentTemplate = { } ,
271- mediaUrl ;
271+ mediaUrl ,
272+ streamIndexTimeScale ;
272273
273274 mediaUrl = this . domParser . getAttributeValue ( streamIndex , "Url" ) . replace ( '{bitrate}' , '$Bandwidth$' ) ;
274275 mediaUrl = mediaUrl . replace ( '{start time}' , '$Time$' ) ;
275276
277+ streamIndexTimeScale = this . domParser . getAttributeValue ( streamIndex , "TimeScale" ) ;
278+ streamIndexTimeScale = streamIndexTimeScale ? parseFloat ( streamIndexTimeScale ) : timescale ;
279+
276280 segmentTemplate . media = mediaUrl ;
277- segmentTemplate . timescale = timescale ;
281+ segmentTemplate . timescale = streamIndexTimeScale ;
278282
279- segmentTemplate . SegmentTimeline = mapSegmentTimeline . call ( this , streamIndex , timescale ) ;
283+ segmentTemplate . SegmentTimeline = mapSegmentTimeline . call ( this , streamIndex , segmentTemplate . timescale ) ;
280284
281285 return segmentTemplate ;
282286 } ,
@@ -676,7 +680,7 @@ Mss.dependencies.MssParser = function() {
676680 for ( i = 0 ; i < adaptations . length ; i ++ ) {
677681 if ( adaptations [ i ] . contentType === 'audio' || adaptations [ i ] . contentType === 'video' ) {
678682 segments = adaptations [ i ] . SegmentTemplate . SegmentTimeline . S_asArray ;
679- startTime = segments [ 0 ] . t ;
683+ startTime = segments [ 0 ] . t / adaptations [ i ] . SegmentTemplate . timescale ;
680684 if ( timestampOffset === undefined ) {
681685 timestampOffset = startTime ;
682686 }
@@ -697,7 +701,7 @@ Mss.dependencies.MssParser = function() {
697701 if ( ! segments [ j ] . tManifest ) {
698702 segments [ j ] . tManifest = segments [ j ] . t ;
699703 }
700- segments [ j ] . t -= timestampOffset ;
704+ segments [ j ] . t -= ( timestampOffset * adaptations [ i ] . SegmentTemplate . timescale ) ;
701705 }
702706 if ( adaptations [ i ] . contentType === 'audio' || adaptations [ i ] . contentType === 'video' ) {
703707 period . start = Math . max ( segments [ 0 ] . t , period . start ) ;
0 commit comments