Skip to content

Commit

Permalink
fix: Unmask errors on LL (#5908)
Browse files Browse the repository at this point in the history
  • Loading branch information
avelad committed Nov 22, 2023
1 parent 57601df commit 7a7e83b
Showing 1 changed file with 35 additions and 27 deletions.
62 changes: 35 additions & 27 deletions lib/media/streaming_engine.js
Expand Up @@ -1351,6 +1351,7 @@ shaka.media.StreamingEngine = class {
let remaining = new Uint8Array(0);
let processingResult = false;
let callbackCalled = false;
let streamDataCallbackError;
const streamDataCallback = async (data) => {
if (processingResult) {
// If the fallback result processing was triggered, don't also
Expand All @@ -1363,40 +1364,47 @@ shaka.media.StreamingEngine = class {
if (this.fatalError_) {
return;
}
// Append the data with complete boxes.
// Every time streamDataCallback gets called, append the new data to
// the remaining data.
// Find the last fully completed Mdat box, and slice the data into two
// parts: the first part with completed Mdat boxes, and the second
// part with an incomplete box.
// 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,
try {
// Append the data with complete boxes.
// Every time streamDataCallback gets called, append the new data
// to the remaining data.
// Find the last fully completed Mdat box, and slice the data into
// two parts: the first part with completed Mdat boxes, and the
// second part with an incomplete box.
// 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,
/* isChunkedData= */ true);
if (sawMDAT) {
const dataToAppend = remaining.subarray(0, offset);
remaining = remaining.subarray(offset);
await this.append_(
mediaState, presentationTime, stream, reference, dataToAppend,
/* isChunkedData= */ true);

if (mediaState.segmentPrefetch && mediaState.segmentIterator) {
mediaState.segmentPrefetch.prefetchSegments(
reference, /* skipFirst= */ true);

if (mediaState.segmentPrefetch && mediaState.segmentIterator) {
mediaState.segmentPrefetch.prefetchSegments(
reference, /* skipFirst= */ true);
}
}
} catch (error) {
streamDataCallbackError = error;
}
};

const result =
await this.fetch_(mediaState, reference, streamDataCallback);
if (streamDataCallbackError) {
throw streamDataCallbackError;
}
if (!callbackCalled) {
// In some environments, we might be forced to use network plugins
// that don't support streamDataCallback. In those cases, as a
Expand Down

0 comments on commit 7a7e83b

Please sign in to comment.