Skip to content

Commit

Permalink
Fix audio demuxing starting without knowing video initPTS
Browse files Browse the repository at this point in the history
  • Loading branch information
jungdaniel committed Jul 21, 2020
1 parent 489fbe3 commit 9e5812a
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/controller/stream-controller.js
Expand Up @@ -40,7 +40,8 @@ class StreamController extends BaseStreamController {
Event.AUDIO_TRACK_SWITCHED,
Event.BUFFER_CREATED,
Event.BUFFER_APPENDED,
Event.BUFFER_FLUSHED);
Event.BUFFER_FLUSHED,
Event.INIT_PTS_FOUND);

this.fragmentTracker = fragmentTracker;
this.config = hls.config;
Expand All @@ -51,6 +52,7 @@ class StreamController extends BaseStreamController {
this.altAudio = false;
this.audioOnly = false;
this.bitrateTest = false;
this.initPTS = [];
}

startLoad (startPosition) {
Expand Down Expand Up @@ -856,6 +858,7 @@ class StreamController extends BaseStreamController {
const stats = data.stats;
const currentLevel = levels[fragCurrent.level];
const details = currentLevel.details;
const cc = fragCurrent.cc;
// reset frag bitrate test in any case after frag loaded event
// if this frag was loaded to perform a bitrate test AND if hls.nextLoadLevel is greater than 0
// then this means that we should be able to load a fragment at a higher quality level
Expand Down Expand Up @@ -896,6 +899,7 @@ class StreamController extends BaseStreamController {
const initSegmentData = details.initSegment ? details.initSegment.data : [];
const audioCodec = this._getAudioCodec(currentLevel);

let initPTS = this.initPTS[cc];
// transmux the MPEG-TS data to ISO-BMFF segments
const demuxer = this.demuxer = this.demuxer || new Demuxer(this.hls, 'main');
demuxer.push(
Expand All @@ -905,7 +909,8 @@ class StreamController extends BaseStreamController {
currentLevel.videoCodec,
fragCurrent,
details.totalduration,
accurateTimeOffset
accurateTimeOffset,
initPTS
);
}
}
Expand Down Expand Up @@ -1324,6 +1329,15 @@ class StreamController extends BaseStreamController {
this.fragPrevious = null;
}

// Signal that audio PTS was found
onInitPtsFound (data) {
let demuxerId = data.id, cc = data.frag.cc, initPTS = data.initPTS;
if (demuxerId === 'audio') {
this.initPTS[cc] = initPTS;
logger.log(`InitPTS for cc: ${cc} found from audio track: ${initPTS}`);
}
}

onLevelsUpdated (data) {
this.levels = data.levels;
}
Expand Down

0 comments on commit 9e5812a

Please sign in to comment.