Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deferring filling URI templates #496

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions lib/dash/mpd_processor.js
Original file line number Diff line number Diff line change
Expand Up @@ -1144,12 +1144,12 @@ shaka.dash.MpdProcessor.prototype.makeSegmentIndexSourceViaIndexUrlTemplate_ =
}

// Generate the media URL.
var mediaUrl = shaka.dash.MpdUtils.createFromTemplate(
networkCallback, representation, 1, 0, 0, null);
if (!mediaUrl) {
// var mediaUrl = shaka.dash.MpdUtils.createFromTemplate(
// networkCallback, representation, 1, 0, 0, null);
// if (!mediaUrl) {
// An error has already been logged.
return null;
}
// return null;
//}

// Generate a RepresentationIndex.
var representationIndex = this.generateRepresentationIndex_(representation);
Expand Down
18 changes: 12 additions & 6 deletions lib/dash/mpd_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@ shaka.dash.MpdUtils.generateSegmentReferences = function(
var timeReplacement = startTime;

// Generate the media URL.
var mediaUrl = shaka.dash.MpdUtils.createFromTemplate(
var mediaUrlFunction = shaka.dash.MpdUtils.createFromTemplate(
networkCallback, representation, segmentReplacement, timeReplacement,
0 /* startByte */, null /* endByte */);
if (!mediaUrl) {
if (!mediaUrlFunction) {
// An error has already been logged.
return null;
}
Expand All @@ -90,13 +90,15 @@ shaka.dash.MpdUtils.generateSegmentReferences = function(
new shaka.media.SegmentReference(
scaledStartTime,
scaledEndTime,
mediaUrl));
mediaUrlFunction));
}

return references;
};




/**
* Creates a FailoverUri from a relative template URL.
*
Expand All @@ -106,7 +108,7 @@ shaka.dash.MpdUtils.generateSegmentReferences = function(
* @param {number} time
* @param {number} startByte
* @param {?number} endByte
* @return {shaka.util.FailoverUri}
* @return {shaka.util.FailoverUri} or pointer to function which return shaka.util.FailoverUri in case deferring filling URI templates
*/
shaka.dash.MpdUtils.createFromTemplate = function(
networkCallback, representation, number, time, startByte, endByte) {
Expand All @@ -125,22 +127,26 @@ shaka.dash.MpdUtils.createFromTemplate = function(
null;
}


var fillUrlTemplateFunction= function() {
var filledUrlTemplate = shaka.dash.MpdUtils.fillUrlTemplate(
urlTemplate,
representation.id,
number,
representation.bandwidth,
time);

if (!filledUrlTemplate) {
// An error has already been logged.
return null;
}

var mediaUrl = shaka.util.FailoverUri.resolve(
representation.baseUrl, filledUrlTemplate);
return new shaka.util.FailoverUri(
networkCallback, mediaUrl, startByte, endByte);

}

return fillUrlTemplateFunction;
};


Expand Down
6 changes: 3 additions & 3 deletions lib/dash/timeline_segment_index_source.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,10 @@ shaka.dash.TimelineSegmentIndexSource.prototype.create = function() {
var timeReplacement = startTime;

// Generate the media URL.
var mediaUrl = shaka.dash.MpdUtils.createFromTemplate(
var mediaUrlFunction = shaka.dash.MpdUtils.createFromTemplate(
this.networkCallback_, this.representation_, segmentReplacement,
timeReplacement, 0, null);
if (!mediaUrl) {
if (!mediaUrlFunction) {
var error = new Error('Failed to generate media URL.');
error.type = 'dash';
return Promise.reject(error);
Expand All @@ -143,7 +143,7 @@ shaka.dash.TimelineSegmentIndexSource.prototype.create = function() {
new shaka.media.SegmentReference(
scaledStartTime - scaledPto,
scaledEndTime - scaledPto,
mediaUrl));
mediaUrlFunction));
}

if (shaka.features.Live && this.mpd_.type == 'dynamic') {
Expand Down
14 changes: 11 additions & 3 deletions lib/media/source_buffer_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,8 +247,16 @@ shaka.media.SourceBufferManager.prototype.fetch = function(
this.sourceBuffer_.timestampOffset = timestampOffset;
}

var mediaUrl;
if (typeof(reference.url)=='function') { //deffered initialization
mediaUrl=reference.url.call();
}
else {
mediaUrl=reference.url;
}

if (shaka.features.Offline &&
reference.url.isOfflineUri() && !this.contentDatabase_) {
mediaUrl.isOfflineUri() && !this.contentDatabase_) {
this.contentDatabase_ = new shaka.util.ContentDatabaseReader();
this.task_.append(
function() {
Expand All @@ -274,8 +282,8 @@ shaka.media.SourceBufferManager.prototype.fetch = function(
params.requestTimeoutMs = this.segmentRequestTimeout_ * 1000;
params.contentDatabase = this.contentDatabase_;
return [
reference.url.fetch(params, this.estimator_),
shaka.util.FailoverUri.prototype.abortFetch.bind(reference.url)];
mediaUrl.fetch(params, this.estimator_),
shaka.util.FailoverUri.prototype.abortFetch.bind(mediaUrl)];
}.bind(this));

// Sanity check: appendBuffer() should not modify the MediaSource's duration
Expand Down
9 changes: 8 additions & 1 deletion lib/util/content_database_writer.js
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,15 @@ shaka.util.ContentDatabaseWriter.prototype.requestSegment_ = function(
reference) {
var params = new shaka.util.AjaxRequest.Parameters();
params.requestTimeoutMs = this.segmentRequestTimeout_ * 1000;
var mediaUrl;
if (typeof(reference.url)=='function') { //deffered initialization
mediaUrl=reference.url.call();
}
else {
mediaUrl=reference.url;
}
return /** @type {!Promise.<!ArrayBuffer>} */ (
reference.url.fetch(params, this.estimator_));
mediaUrl.fetch(params, this.estimator_));
};


Expand Down