Skip to content

Commit

Permalink
added mdat partition to fetch tvs
Browse files Browse the repository at this point in the history
  • Loading branch information
jobispo committed Oct 3, 2023
1 parent ec840ee commit 8079a95
Show file tree
Hide file tree
Showing 9 changed files with 1,394 additions and 1,373 deletions.
354 changes: 177 additions & 177 deletions dist/shaka-player.compiled.debug.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/shaka-player.compiled.debug.map

Large diffs are not rendered by default.

453 changes: 227 additions & 226 deletions dist/shaka-player.compiled.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions dist/shaka-player.compiled.map

Large diffs are not rendered by default.

120 changes: 60 additions & 60 deletions dist/shaka-player.ui.debug.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/shaka-player.ui.debug.map

Large diffs are not rendered by default.

1,693 changes: 847 additions & 846 deletions dist/shaka-player.ui.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions dist/shaka-player.ui.map

Large diffs are not rendered by default.

127 changes: 73 additions & 54 deletions lib/media/streaming_engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -1209,6 +1209,7 @@ shaka.media.StreamingEngine = class {
// Enable MP4 low latency streaming with ReadableStream chunked data.
if (this.config_.lowLatencyMode && isFetchSupported && isMP4) {
let remaining = new Uint8Array(0);
let busy = false;
const streamDataCallback = async (data) => {
this.destroyer_.ensureNotDestroyed();
if (this.fatalError_) {
Expand All @@ -1223,23 +1224,43 @@ shaka.media.StreamingEngine = class {
// Append the first part, and save the second part as remaining data,
// and handle it with the next streamDataCallback call.
remaining = this.concatArray_(remaining, data);
let sawMDAT = false;
let offset = 0;
new shaka.util.Mp4Parser()
.box('mdat', (box) => {
offset = box.size + box.start;
sawMDAT = true;
})
.parse(remaining, /* partialOkay= */ false,
/* isChunkedData= */ true);
if (sawMDAT) {
const dataToAppend = remaining.subarray(0, offset);
remaining = remaining.subarray(offset);
await this.append_(
mediaState, presentationTime, stream, reference, dataToAppend);
if (!busy) {
const fn = () => new Promise((resolve) => {
if (remaining.byteLength) {
const counter = 0;
let sawMDAT = false;
let offset = 0;
const parser = new shaka.util.Mp4Parser();
parser
.box('mdat', (box) => {
offset = box.size + box.start;
sawMDAT = true;
if (counter === 20) {
parser.stop();
}
})
.parse(remaining, /* partialOkay= */ false,
/* isChunkedData= */ true);
if (sawMDAT) {
const dataToAppend = remaining.subarray(0, offset);
remaining = remaining.subarray(offset);
busy = true;
this.append_(mediaState, presentationTime,
stream, reference, dataToAppend)
.then(fn)
.then(resolve);
} else {
busy = false;
resolve();
}
} else {
busy = false;
resolve();
}
});
await fn();
}
};

await this.fetch_(mediaState, reference, streamDataCallback);
} else if (this.config_.lowLatencyMode && !isFetchSupported && isMP4) {
const fetchSegment = this.fetch_(mediaState, reference);
Expand All @@ -1253,46 +1274,44 @@ shaka.media.StreamingEngine = class {
return;
}

const fn = () => {
return new Promise((resolve, reject) => {
let counter = 0;
this.destroyer_.ensureNotDestroyed();
if (this.fatalError_) {
reject();
}
if (remaining.byteLength) {
let sawMDAT = false;
let offset = 0;
const parser = new shaka.util.Mp4Parser();
parser
.box('mdat', (box) => {
offset = box.size + box.start;
sawMDAT = true;
counter++;
if (counter === 20) {
parser.stop();
}
})
.parse(remaining, /* partialOkay= */ false,
/* isChunkedData= */ true);

if (sawMDAT) {
const dataToAppend = remaining.subarray(0, offset);
remaining = remaining.subarray(offset);
shaka.log.info('mdat boxes', counter, presentationTime, offset,
remaining.byteLength);
this.append_(
mediaState, presentationTime, stream,
reference, dataToAppend)
.finally(() => new shaka.util.Timer(() => {
fn().then(resolve);
}).tickAfter(0.8));
}
} else {
resolve();
const fn = () => new Promise((resolve, reject) => {
let counter = 0;
this.destroyer_.ensureNotDestroyed();
if (this.fatalError_) {
reject();
}
if (remaining.byteLength) {
let sawMDAT = false;
let offset = 0;
const parser = new shaka.util.Mp4Parser();
parser
.box('mdat', (box) => {
offset = box.size + box.start;
sawMDAT = true;
counter++;
if (counter === 20) {
parser.stop();
}
})
.parse(remaining, /* partialOkay= */ false,
/* isChunkedData= */ true);

if (sawMDAT) {
const dataToAppend = remaining.subarray(0, offset);
remaining = remaining.subarray(offset);
shaka.log.info('mdat boxes', counter, presentationTime, offset,
remaining.byteLength);
this.append_(
mediaState, presentationTime, stream,
reference, dataToAppend)
.finally(() => new shaka.util.Timer(() => {
fn().then(resolve);
}).tickAfter(0.8));
}
});
};
} else {
resolve();
}
});
await fn();
} else {
if (this.config_.lowLatencyMode && !isFetchSupported) {
Expand Down

0 comments on commit 8079a95

Please sign in to comment.