Skip to content

Commit

Permalink
rename, parse sct35 to array buffer, inbandMetaData, remove useless a…
Browse files Browse the repository at this point in the history
…rg to segment loader
  • Loading branch information
harisha-swaminathan committed Jun 22, 2023
1 parent 11e1c85 commit fa0758c
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 26 deletions.
7 changes: 3 additions & 4 deletions src/playlist-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,7 @@ export class PlaylistController extends videojs.EventTarget {
sourceUpdater: this.sourceUpdater_,
timelineChangeController: this.timelineChangeController_,
exactManifestTimings: options.exactManifestTimings,
addMetadataToTextTrack: this.addMetadataToTextTrack.bind(this),
addDaterangeToTextTrack: this.addDaterangeToTextTrack.bind(this)
addMetadataToTextTrack: this.addMetadataToTextTrack.bind(this)
};

// The source type check not only determines whether a special DASH playlist loader
Expand Down Expand Up @@ -2025,7 +2024,7 @@ export class PlaylistController extends videojs.EventTarget {
return Config.BUFFER_HIGH_WATER_LINE;
}

addDaterangeToTextTrack(metadataArray) {
addDaterangeToTextTrack(mediaPlaylist) {
const timestampOffset = this.sourceUpdater_.videoBuffer ?
this.sourceUpdater_.videoTimestampOffset() : this.sourceUpdater_.audioTimestampOffset();

Expand All @@ -2035,7 +2034,7 @@ export class PlaylistController extends videojs.EventTarget {
}, false).track;
addDaterangeMetadata({
inbandTextTracks: this.inbandTextTracks_,
metadataArray,
mediaPlaylist,
timestampOffset
});
}
Expand Down
47 changes: 27 additions & 20 deletions src/util/text-tracks.js
Original file line number Diff line number Diff line change
Expand Up @@ -223,51 +223,58 @@ export const addMetadata = ({
});
};

// object for mapping daterange attributes
const daterangeAttr = {
id: 'ID',
class: 'CLASS',
startDate: 'START-DATE',
duration: 'DURATION',
endDate: 'END-DATE',
endOnNext: 'END-ON-NEXT',
plannedDuration: 'PLANNED-DURATION',
scte35Out: 'SCTE35-OUT',
scte35In: 'SCTE35-IN'
};

/**
* Add daterange metadata text track to a source handler given an array of metadata
*
* @param {Object}
* @param {Object} inbandTextTracks the inband text tracks
* @param {Array} metadataArray an array of meta data
* @param {Object} mediaPlaylist parsed media playlist
* @private
*/
export const addDaterangeMetadata = ({
inbandTextTracks,
metadataArray,
mediaPlaylist,
timestampOffset
}) => {
if (!metadataArray) {
if (!mediaPlaylist) {
return;
}

const Cue = window.WebKitDataCue || window.VTTCue;
const metadataTrack = inbandTextTracks.metadataTrack_;
const daterangeAttr = {
id: 'ID',
class: 'CLASS',
startDate: 'START-DATE',
duration: 'DURATION',
endDate: 'END-DATE',
endOnNext: 'END-ON-NEXT',
plannedDuration: 'PLANNED-DURATION',
scte35Out: 'SCTE35-OUT',
scte35In: 'SCTE35-IN'
};

if (!metadataTrack) {
return;
}

metadataArray.daterange.forEach((metadata) => {
const startTime = timestampOffset + (new Date(metadata.startDate).getTime() - new Date(metadataArray.dateTimeObject).getTime()) / 1000;
const endTime = metadata.endDate ? (new Date(metadata.endDate).getTime() - new Date(metadataArray.dateTimeObject).getTime()) / 1000 : 0;
const dateRanges = mediaPlaylist.daterange;

dateRanges.forEach((dateRange) => {
const startTime = timestampOffset + (new Date(dateRange.startDate).getTime() - new Date(mediaPlaylist.dateTimeObject).getTime()) / 1000;
const endTime = dateRange.endDate ? (new Date(dateRange.endDate).getTime() - new Date(mediaPlaylist.dateTimeObject).getTime()) / 1000 : 0;
const cue = new Cue(startTime, endTime, '');

cue.id = metadata.id;
Object.keys(metadata).forEach((key) => {
cue.id = dateRange.id;
cue.type = 'com.apple.quicktime.HLS';
Object.keys(dateRange).forEach((key) => {
if (!['id', 'class', 'startDate', 'duration', 'endDate', 'endOnNext'].includes(key)) {
cue.value = {keys: daterangeAttr[key], data: metadata[key]};
if (key === 'scte35Out') {
dateRange[key] = new Uint8Array(dateRange[key].match(/[\da-f]{2}/gi)).buffer;
}
cue.value = {key: daterangeAttr[key], data: dateRange[key]};
cue.startTime = startTime;
cue.endTime = endTime;
metadataTrack.addCue(cue);
Expand Down
4 changes: 2 additions & 2 deletions test/playlist-controller.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ QUnit.test('addDaterangeToTextTrack adds expected metadata to the metadataTrack'
id: cue.id,
value: {
data: cue.value.data,
keys: cue.value.keys
key: cue.value.key
}
};
});
Expand All @@ -501,7 +501,7 @@ QUnit.test('addDaterangeToTextTrack adds expected metadata to the metadataTrack'
endTime: 2,
value: {
data: 40,
keys: 'PLANNED-DURATION'
key: 'PLANNED-DURATION'
}
}
];
Expand Down

0 comments on commit fa0758c

Please sign in to comment.