Skip to content

Commit

Permalink
add sidx to the segment base playlists
Browse files Browse the repository at this point in the history
  • Loading branch information
ldayananda committed Nov 9, 2018
1 parent 28d217a commit d8fe320
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 7 deletions.
19 changes: 19 additions & 0 deletions src/segment/segmentBase.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ export const segmentsFromBase = (attributes) => {
source: initialization.sourceURL,
range: initialization.range
});

if (indexRange) {
// sidx is defined so do not try to parse segments
return [];
}

const segment = urlTypeConverter({ baseUrl, source: baseUrl, range: indexRange });

segment.map = initSegment;
Expand All @@ -55,3 +61,16 @@ export const segmentsFromBase = (attributes) => {

return [segment];
};

export const sidxFromBase = (attributes) => {
const {
baseUrl,
indexRange = ''
} = attributes;

if (!indexRange) {
return null;
}

return urlTypeConverter({ baseUrl, source: baseUrl, range: indexRange });
};
6 changes: 5 additions & 1 deletion src/toM3u8.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ export const organizeVttPlaylists = playlists => {
}, {});
};

export const formatVideoPlaylist = ({ attributes, segments }) => {
export const formatVideoPlaylist = ({ attributes, segments, sidx }) => {
const playlist = {
attributes: {
NAME: attributes.id,
Expand All @@ -168,6 +168,10 @@ export const formatVideoPlaylist = ({ attributes, segments }) => {
playlist.contentProtection = attributes.contentProtection;
}

if (sidx) {
playlist.sidx = sidx;
}

return playlist;
};

Expand Down
30 changes: 24 additions & 6 deletions src/toPlaylists.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,42 @@
import { merge } from './utils/object';
import { segmentsFromTemplate } from './segment/segmentTemplate';
import { segmentsFromList } from './segment/segmentList';
import { segmentsFromBase } from './segment/segmentBase';
import {
segmentsFromBase,
sidxFromBase
} from './segment/segmentBase';

export const generateSegments = ({ attributes, segmentInfo }) => {
let segmentAttributes;
let segmentsFn;
let sidxFn;

if (segmentInfo.template) {
segmentsFn = segmentsFromTemplate;
segmentAttributes = merge(attributes, segmentInfo.template);
} else if (segmentInfo.base) {
segmentsFn = segmentsFromBase;
sidxFn = sidxFromBase;
segmentAttributes = merge(attributes, segmentInfo.base);
} else if (segmentInfo.list) {
segmentsFn = segmentsFromList;
segmentAttributes = merge(attributes, segmentInfo.list);
}

const segmentsInfo = {
attributes
};

if (!segmentsFn) {
return { attributes };
return segmentsInfo;
}

const segments = segmentsFn(segmentAttributes, segmentInfo.timeline);
let sidx;

if (sidxFn) {
sidx = sidxFn(segmentAttributes);
}

// The @duration attribute will be used to determin the playlist's targetDuration which
// must be in seconds. Since we've generated the segment list, we no longer need
Expand All @@ -41,10 +55,14 @@ export const generateSegments = ({ attributes, segmentInfo }) => {
segmentAttributes.duration = 0;
}

return {
attributes: segmentAttributes,
segments
};
segmentsInfo.attributes = segmentAttributes;
segmentsInfo.segments = segments;

if (sidx) {
segmentsInfo.sidx = sidx;
}

return segmentsInfo;
};

export const toPlaylists = (representations) => representations.map(generateSegments);

0 comments on commit d8fe320

Please sign in to comment.