Skip to content

Commit

Permalink
Fix thumbnail tracks (#3238)
Browse files Browse the repository at this point in the history
* fix SegmentBase thumbnail tracks initialisation

* Fix ThumbnailsTrack's DashHandler initialization

* fix SegmentBase thumbnail tracks initialisation
  • Loading branch information
bbert authored May 5, 2020
1 parent d9009d6 commit eedea0d
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 51 deletions.
6 changes: 3 additions & 3 deletions src/dash/SegmentBaseLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ function SegmentBaseLoader() {
logger.debug('Perform init search: ' + info.url);
}

function loadSegments(representation, type, range, loadingInfo, callback) {
function loadSegments(representation, type, range, callback, loadingInfo) {
checkConfig();
if (range && (range.start === undefined || range.end === undefined)) {
const parts = range ? range.toString().split('-') : null;
Expand Down Expand Up @@ -232,7 +232,7 @@ function SegmentBaseLoader() {
info.range.end += extraBytes;
}
}
loadSegments(representation, type, info.range, info, callback);
loadSegments(representation, type, info.range, callback, info);
} else {
const ref = sidx.references;
let loadMultiSidx,
Expand Down Expand Up @@ -272,7 +272,7 @@ function SegmentBaseLoader() {
se = offset + ref[j].referenced_size - 1;
offset = offset + ref[j].referenced_size;
r = {start: ss, end: se};
loadSegments(representation, null, r, info, tmpCallback);
loadSegments(representation, null, r, tmpCallback, info);
}

} else {
Expand Down
104 changes: 56 additions & 48 deletions src/streaming/thumbnail/ThumbnailTracks.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,15 @@ function ThumbnailTracks(config) {
loader = XHRLoader(context).create({});
boxParser = BoxParser(context).getInstance();

indexHandler = DashHandler(context).create({timelineConverter: timelineConverter,
baseURLController: baseURLController,
debug: debug,
eventBus: eventBus,
events: events,
dashConstants: dashConstants});
indexHandler = DashHandler(context).create({
timelineConverter: timelineConverter,
baseURLController: baseURLController,
debug: debug,
eventBus: eventBus,
events: events,
dashConstants: dashConstants,
urlUtils: urlUtils
});

// initialize controllers
indexHandler.initialize(adapter ? adapter.getIsDynamic() : false);
Expand Down Expand Up @@ -173,51 +176,56 @@ function ThumbnailTracks(config) {
}

if (useSegmentBase) {
eventBus.trigger(Events.SEGMENTBASE_SEGMENTSLIST_REQUEST_NEEDED, {mimeType: mediaInfo.mimeType, mediaType: Constants.IMAGE, representation: representation, function(segments, representation) {
let cache = [];
segments = normalizeSegments(segments, representation);
track.segmentDuration = segments[0].duration; //assume all segments have the same duration
track.readThumbnail = function (time, callback) {

let cached = null;
cache.some(el => {
if (el.start <= time && el.end > time) {
cached = el.url;
return true;
}
});
if (cached) {
callback(cached);
} else {
segments.some((ss) => {
if (ss.mediaStartTime <= time && ss.mediaStartTime + ss.duration > time) {
const baseURL = baseURLController.resolve(representation.path);
loader.load({
method: 'get',
url: baseURL.url,
request: {
range: ss.mediaRange,
responseType: 'arraybuffer'
},
onload: function (e) {
let info = boxParser.getSamplesInfo(e.target.response);
let blob = new Blob( [ e.target.response.slice(info.sampleList[0].offset, info.sampleList[0].offset + info.sampleList[0].size) ], { type: 'image/jpeg' } );
let imageUrl = window.URL.createObjectURL( blob );
cache.push({
start: ss.mediaStartTime,
end: ss.mediaStartTime + ss.duration,
url: imageUrl
});
if (callback)
callback(imageUrl);
}
});
eventBus.trigger(Events.SEGMENTBASE_SEGMENTSLIST_REQUEST_NEEDED, {
mimeType: mediaInfo.mimeType,
mediaType: Constants.IMAGE,
representation: representation,
callback: function (segments, representation) {
let cache = [];
segments = normalizeSegments(segments, representation);
track.segmentDuration = segments[0].duration; //assume all segments have the same duration
track.readThumbnail = function (time, callback) {

let cached = null;
cache.some(el => {
if (el.start <= time && el.end > time) {
cached = el.url;
return true;
}
});
}
};
}});
if (cached) {
callback(cached);
} else {
segments.some((ss) => {
if (ss.mediaStartTime <= time && ss.mediaStartTime + ss.duration > time) {
const baseURL = baseURLController.resolve(representation.path);
loader.load({
method: 'get',
url: baseURL.url,
request: {
range: ss.mediaRange,
responseType: 'arraybuffer'
},
onload: function (e) {
let info = boxParser.getSamplesInfo(e.target.response);
let blob = new Blob( [ e.target.response.slice(info.sampleList[0].offset, info.sampleList[0].offset + info.sampleList[0].size) ], { type: 'image/jpeg' } );
let imageUrl = window.URL.createObjectURL( blob );
cache.push({
start: ss.mediaStartTime,
end: ss.mediaStartTime + ss.duration,
url: imageUrl
});
if (callback)
callback(imageUrl);
}
});
return true;
}
});
}
};
}
});
} else {
track.startNumber = representation.startNumber;
track.segmentDuration = representation.segmentDuration;
Expand Down

0 comments on commit eedea0d

Please sign in to comment.