Bump up to a vjs 5 release candidate. Make the necessary changes to work with the updated APIs. Convert the project from a subclass of the Flash tech to a source handler.
Keep the example page simple. Add a live graph of cue point PTS position versus media timeline position. Update the display so it works with live content.
Closes#272.
Squashed commit of the following:
commit de597c3ee1
Author: David LaPalomento <dlapalomento@gmail.com>
Date: Fri May 22 14:02:27 2015 -0400
Remove vim swap file
Ignore them in version control in the future.
commit fb189ba163
Author: Gary Katsevman <git@gkatsev.com>
Date: Wed May 20 18:30:07 2015 -0400
Default 'nextFrameKeyFrame' to false.
commit 3788ad0607
Author: Gary Katsevman <git@gkatsev.com>
Date: Wed May 20 18:24:16 2015 -0400
setNextFrameKeyFrame
commit 6944234afd
Author: Gary Katsevman <git@gkatsev.com>
Date: Wed May 20 18:06:26 2015 -0400
Another camelcase usage
commit da6e32a4d9
Author: Gary Katsevman <git@gkatsev.com>
Date: Wed May 20 18:05:30 2015 -0400
Dont parse unused fields. Use camel case names
commit fb7990b660
Author: Gary Katsevman <git@gkatsev.com>
Date: Wed May 20 16:28:28 2015 -0400
ifs should have curly braces
commit 92e40c6422
Author: Gary Katsevman <git@gkatsev.com>
Date: Wed May 20 15:58:18 2015 -0400
Adaptation Field vars. Use Random Access Indicator
The Random Access Indicator tells us whether something is a keyframe.
Set the stream's frame's keyFrame property to true if the Random Access
Indicator is set.
commit 047a6d7771
Author: Gary Katsevman <git@gkatsev.com>
Date: Mon May 18 16:56:23 2015 -0400
Set up the test with exact conditions
commit e2f8b18656
Author: Gary Katsevman <git@gkatsev.com>
Date: Mon May 18 16:56:01 2015 -0400
Restore stubbed out methods
commit ff5f3b5fdb
Author: Gary Katsevman <git@gkatsev.com>
Date: Mon May 18 16:50:22 2015 -0400
prototypeify h264-stream
commit 7ee359d582
Author: Gary Katsevman <git@gkatsev.com>
Date: Mon May 18 16:28:08 2015 -0400
Initial test for metadata
commit 0e3a961c75
Author: Gary Katsevman <git@gkatsev.com>
Date: Mon May 18 16:21:55 2015 -0400
Fix test properly
commit 7e0de30822
Author: Gary Katsevman <git@gkatsev.com>
Date: Mon May 18 16:14:57 2015 -0400
Move h264-extradata into separate file
commit 66a676c234
Author: Gary Katsevman <git@gkatsev.com>
Date: Mon May 18 15:52:08 2015 -0400
prototypeify H264ExtraData
The minified 4.x build mangles "preload" passed in as options, which prevents it being overridden in data-setup or through the video element attribute. Switch to the dev version so that preload settings can be adjusted.
Moving live start time calculation earlier in the code flow to
eliminate a race condition, repeating it on first play to create a
smooth experience, and making sure currentTime is updated to match
these changes.
Moving live start time calculation earlier in the code flow to
eliminate a race condition, repeating it on first play to create a
smooth experience, and making sure currentTime is updated to match
these changes.
Used an adaptive, encrypted m3u8 on the example page and included hex dump utilities. Fixed formatting issues with the hex dump utility. Passed a 16-byte IV to the decrypter in drainBuffer(). Swapped byte order for the keys so they are not misintrepreted as little-endian. Added fields to the muxer test page to mux encrypted segments. Updated tests. Fixed docs on using openssl to test encryption and decryption.
Remove async tag queueing from HLS since that is now happening in the media sources plugin itself. Update the location of MSE source files. Bump the dependency in package.json. Two tests are still failing with this commit but will be fixed shortly.
Pushing an entire segment worth of FLV tags into the source buffer at once caused noticeable delays with high-bitrate segments. Instead, wrap each call to appendBuffer in a setTimeout of zero so that the browser has a chance to render frames while the segment is being transferred to the SWF. Make sure that appends-in-progress are cleared if a seek is initiated.
Get rid of leftovers from the previous iteration of managing manifest and stream downloading. That logic has been consolidated into the main plugin file.
Instead of only supporting the src attribute, check options.sources for HLS on init. This means re-implementing something that looks a lot like video.js's source selection algorithm. That's another reason to consider converting this plugin into a tech but I'm deferring that for now.
Bipbop is great for testing because it displays so much information about the current state of the video. Use a standard "src" attribute to initialize the plugin in the example.
Move more of the manifest management and segment loading into a more customary location for a plugin implementation. Get a single segment downloading and playing. Add test cases for the plugin initialization and first segment download. Use a linked version of media sources to pick up an event listening implementation on SourceBuffer that doesn't require an unminified version of video.js.
Switch the example to use the locally committed HLS fixture to avoid CORS issues when trying it out. It will still be necessary to load the example page through a web server, though.
The example page is very ugly but attempts to play two segments of bip-bop. The first segment plays fine but the player seems to jump to the end of the second segment after the first one finishes. Add bip bop test fixtures.
loadWord wasn't incrementing the position in the byte stream so fix it so that the accounting is taken care of. Replace a bunch of single-letter variable names with more descriptive terms. Add some comments. Add tests for exponential golomb parsing.
Fix up a couple remaining issues with the HLS->FLV translation. At this point, we've validated that the generated file can be played back in VLC if you download it to your computer. Added another ts segment for testing purposes. Added unit testing that traverses the generated FLV and validates the tags are constructed correctly and seem consistent.
The parser can process the example TS but it doesn't appear to be correctly formed. The player does seem to correctly interpret the video duration, but the display area is black and there is no audio.