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

Adding missing manifest information on to segments (EXT-X-PROGRAM-DATE-TIME) #236

Merged
merged 3 commits into from
Nov 30, 2018
Merged
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
2 changes: 2 additions & 0 deletions src/segment-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -1371,6 +1371,8 @@ export default class SegmentLoader extends videojs.EventTarget {

const Cue = window.WebKitDataCue || window.VTTCue;
const value = {
dateTimeObject: (segment && segment.dateTimeObject) || null,
dateTimeString: (segment && segment.dateTimeString) || null,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should probably default to the empty string.

Copy link
Contributor Author

@rart rart Sep 20, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't seem accurate to me. I felt null was a better representation of the value not being there (e.g. manifest doesn't have that information). I can change if '' is preferred, though.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it should either be a string to match the type of that property when a value is present, or, maybe better yet, not have the property at all if a value is absent.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I disagree; but ok :) I'll make the update.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you think having null values would be better?

Copy link
Contributor Author

@rart rart Sep 20, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the consistency in the segment object plus think it could avoid issues of developer not checking if the property is there and getting a error like "cannot read property getTime of undefined" — trying to do dateTimeObject.getTime — for example not knowing that the prop won't be there sometimes. Ultimately, one way or another devs will need to check but just it felt more reliable to be that way.

Not sure if all of the other props there will always be in manifests but according to the code, the other properties are not skipped if not in.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If a property is missing, it'll still be the same null-check:

if (cue.dataTimeObject) {
}
if (cue.dateTimeString) {
}

Also, I only was saying that the dateTimeString should have defaulted to an empty string (which is a falsey value) and not the dateTimeObject

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so you're ok with dateTimeObject being null? You just want dateTimeString to be ''?

or are we sticking with removing them all together when not present?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gkatsev where do we stand on this adjustment?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rart I believe what you have is fine, if the program date time tag has no value for some reason (not sure if this is allowed in the HLS spec) I don't think we should have the property be present with an empty string but rather use null.

bandwidth: segmentInfo.playlist.attributes.BANDWIDTH,
resolution: segmentInfo.playlist.attributes.RESOLUTION,
codecs: segmentInfo.playlist.attributes.CODECS,
Expand Down
16 changes: 12 additions & 4 deletions test/segment-loader.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,9 @@ QUnit.module('SegmentLoader: M2TS', function(hooks) {
bandwidth: 3500000,
resolution: '1920x1080',
codecs: 'mp4a.40.5,avc1.42001e',
byteLength: 10
byteLength: 10,
dateTimeObject: null,
dateTimeString: null
};

assert.equal(track.cues.length, 1, 'one cue added for segment');
Expand All @@ -471,7 +473,9 @@ QUnit.module('SegmentLoader: M2TS', function(hooks) {
bandwidth: 3500000,
resolution: '1920x1080',
codecs: 'mp4a.40.5,avc1.42001e',
byteLength: 10
byteLength: 10,
dateTimeObject: null,
dateTimeString: null
};

assert.equal(track.cues.length, 2, 'one cue added for segment');
Expand All @@ -492,7 +496,9 @@ QUnit.module('SegmentLoader: M2TS', function(hooks) {
bandwidth: 3500000,
resolution: '1920x1080',
codecs: 'mp4a.40.5,avc1.42001e',
byteLength: 10
byteLength: 10,
dateTimeObject: null,
dateTimeString: null
};

assert.equal(track.cues.length, 3, 'one cue added for segment');
Expand All @@ -515,7 +521,9 @@ QUnit.module('SegmentLoader: M2TS', function(hooks) {
bandwidth: 3500000,
resolution: '1920x1080',
codecs: 'mp4a.40.5,avc1.42001e',
byteLength: 10
byteLength: 10,
dateTimeObject: null,
dateTimeString: null
};

assert.equal(track.cues.length, 3, 'overlapped cue removed, new one added');
Expand Down