Skip to content

Commit

Permalink
BUFFER_APPENDED : report buffer parent in event
Browse files Browse the repository at this point in the history
sourcebuffers are now created once all codec infos are received from all stream controllers
related to https://github.com/dailymotion/hls.js/issues/30
  • Loading branch information
mangui committed Apr 29, 2016
1 parent 88d339b commit 96fff8e
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 18 deletions.
5 changes: 3 additions & 2 deletions src/controller/buffer-controller.js
Expand Up @@ -129,7 +129,7 @@ class BufferController extends EventHandler {
this.onBufferEos();
}

this.hls.trigger(Event.BUFFER_APPENDED);
this.hls.trigger(Event.BUFFER_APPENDED, { parent : this.parent});

this.doAppending();
}
Expand Down Expand Up @@ -280,8 +280,9 @@ class BufferController extends EventHandler {
if (segments && segments.length) {
var segment = segments.shift();
try {
//logger.log(`appending ${segment.type} SB, size:${segment.data.length}`);
if(sourceBuffer[segment.type]) {
//logger.log(`appending ${segment.type} SB, size:${segment.data.length}`);
this.parent = segment.parent;
sourceBuffer[segment.type].appendBuffer(segment.data);
this.appendError = 0;
this.appended++;
Expand Down
32 changes: 17 additions & 15 deletions src/controller/stream-controller.js
Expand Up @@ -65,7 +65,7 @@ class StreamController extends EventHandler {
if (this.levels) {
var media = this.media, lastCurrentTime = this.lastCurrentTime;
this.stopLoad();
this.demuxer = new Demuxer(this.hls,0);
this.demuxer = new Demuxer(this.hls,'main');
if (!this.timer) {
this.timer = setInterval(this.ontick, 100);
}
Expand Down Expand Up @@ -779,7 +779,7 @@ class StreamController extends EventHandler {
}

onFragParsingInitSegment(data) {
if (data.id === 0 && this.state === State.PARSING) {
if (data.id === 'main' && this.state === State.PARSING) {
var tracks = data.tracks, trackName, track;

// include levelCodec in audio and video tracks
Expand Down Expand Up @@ -850,7 +850,7 @@ class StreamController extends EventHandler {
var initSegment = track.initSegment;
if (initSegment) {
this.pendingAppending++;
this.hls.trigger(Event.BUFFER_APPENDING, {type: trackName, data: initSegment});
this.hls.trigger(Event.BUFFER_APPENDING, {type: trackName, data: initSegment, parent : 'main'});
}
}
//trigger handler right now
Expand All @@ -859,7 +859,7 @@ class StreamController extends EventHandler {
}

onFragParsingData(data) {
if (data.id === 0 && this.state === State.PARSING) {
if (data.id === 'main' && this.state === State.PARSING) {
this.tparse2 = Date.now();
var level = this.levels[this.level],
frag = this.fragCurrent;
Expand All @@ -873,7 +873,7 @@ class StreamController extends EventHandler {
[data.data1, data.data2].forEach(buffer => {
if (buffer) {
this.pendingAppending++;
hls.trigger(Event.BUFFER_APPENDING, {type: data.type, data: buffer});
hls.trigger(Event.BUFFER_APPENDING, {type: data.type, data: buffer, parent : 'main'});
}
});

Expand All @@ -888,22 +888,24 @@ class StreamController extends EventHandler {
}

onFragParsed(data) {
if (data.id === 0 && this.state === State.PARSING) {
if (data.id === 'main' && this.state === State.PARSING) {
this.stats.tparsed = performance.now();
this.state = State.PARSED;
this._checkAppendedParsed();
}
}

onBufferAppended() {
switch (this.state) {
case State.PARSING:
case State.PARSED:
this.pendingAppending--;
this._checkAppendedParsed();
break;
default:
break;
onBufferAppended(data) {
if (data.parent === 'main') {
switch (this.state) {
case State.PARSING:
case State.PARSED:
this.pendingAppending--;
this._checkAppendedParsed();
break;
default:
break;
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/events.js
Expand Up @@ -13,7 +13,7 @@ module.exports = {
BUFFER_CODECS: 'hlsBufferCodecs',
// fired when we append a segment to the buffer - data: { segment: segment object }
BUFFER_APPENDING: 'hlsBufferAppending',
// fired when we are done with appending a media segment to the buffer
// fired when we are done with appending a media segment to the buffer data : { parent : segment parent that triggered BUFFER_APPENDING }
BUFFER_APPENDED: 'hlsBufferAppended',
// fired when the stream is finished and we want to notify the media buffer that there will be no more data
BUFFER_EOS: 'hlsBufferEos',
Expand Down

0 comments on commit 96fff8e

Please sign in to comment.