All of the tests currently pass, except for those that relied on timestamp-based information. That logic should be migrated into videojs-contrib-media-sources and then the remaining skipped tests can be removed.
HLS has been converted to a source handler but if people are still using the old tech-based mechanism, don't break their player completely. Log a deprecation warning for now and we can remove it completely later.
We shouldn't abort() on the source buffer for every seek. The buffered region is no longer guaranteed to be contiguous, so take that into account when determining if the segment to be loaded needs to be updated. Allow media sources to handle duration updates internally, don't set the duration on every segment download. Doing so was actually causing the range removal algorithm to run when the final segment came in slightly below the duration advertised in the m3u8.
Remove lots of transmuxing-related test harness code and get more of the tests working. Discontinuities, seeking, and PTS-based duration are still unresolved and so those tests are still failing.
Start using a real video.js build now that mergeOptions() is working correctly in master. Begin fixing tests-- there are still a number of tests that are broken.
Use native MediaSources for browsers that support them (currently Chrome) and fall back to Flash for everyone else. Seeking doesn't work as well in Flash as it did previously because the improved duration calculations have not been migrated yet but otherwise things seem to work.
Hack in the changes necessary to use the MP2T->MP4 transmuxer and native media source extensions. If you can find a video that is compatible with the current state of the transmuxer, this commit successfully plays back multiple video segments though seeking seems a bit touchy.
When a NAL unit had trailing zeroes that were split across pushes to the H264Stream, the parser would go into an infinite loop. Instead, make sure we never advance the parser beyond the current push and advance the sync point to a valid position before starting processing. Add HTML-HLS dependencies to the example page.
Suggest ffmpeg + bento4. ffmpeg by itself produces an invalid esds and I couldn't find the correct set of flags to get mp4box to fragment an mp4 in an MSE-compatible way.
Added 16 bytes to the tfhd to specify some default sample configuration so the data offset calculation in the trun must be adjusted to match. Audio now works for my test file. Copy Uint8Arrays used for deepEqual() tests because phantomjs considers two typed arrays with non-equal offsets to be non-equal.
Create textifyMp4() to output a text representation of an inspected mp4. It's more concise than straight JSON.stringify() so hopefully it will allow for quicker comparisons between working and transmuxed MP4s.
Previously, audio media segments were accepted without error but SourceBuffered.buffered.length was still zero. After this change, the buffered property seems to be read appropriately and no errors are generated but audio is still not output.
The generated fragmented mp4 for the audio track can now be appended to a source buffer in Chrome 43 without errors but the buffered duration remains zero after the operation completes. All current tests pass. Sample table entries and mdat contents look consistent with an audio-only, fragmented mp4 generated by ffmpeg though some discrepancies exists in track metadata still.
Simplify ADTS parsing algorith to assume it is invoked at the start of a sync sequence. Track progress through the ADTS data accrately so that subsequent events carrying frames after the first are parsed correclty.
On the mp4 transmux analyzer page, only present the media segment diff if a working media segment is provided. Similarly, only diff the init segments if a working init segment is provided. This cuts down on output that will always vary because TS files do not have the notion of a separate init segment.
Modify the mp4 generator to inspect audio tracks and generate a working initialization segment. Hook the audio init segment up to the mp4 transmuxing test page.
Try to be a bit more descriptive about the purpose and function of individual parts of the transmux pipeline. Prefix the MPEG-2 Transport Stream specific streams with "transport" to indicate their purpose unpacking the TS container. Rename ProgramStream to ElementaryStream so it's less likely to be confused with the MPEG-2 Program Stream container format, instead of the underlying Program Elementary Stream that it's actually associated with. Add more explanatory comments.
Profiling showed that trigger was consistently the longest running method during transmuxing. Inline the common case of passing a single argument to avoid slicing the arguments object. Allow grunt-contrib-connect to respond to external requests for easier demoing of mse-demo.html.
Scale sample durations so to match the timescales specified elsewhere in the media segment. Recreate Uint8Arrays for testing so that equality tests pass in phantomjs. Phantom apparently counts typed arrays with different byteOffsets as not equal.
Fragmented MP4s expected H264 data in mdats to a sequence of NAL units preceded by their length. MPEG2-TS streams transmit H264 data using start codes to signal the beginning of aNAL. When parsing NALs to build the sample table, reformat them to remove start codes and add length fields. Pulled the video-related program stream parsing into its own stream object because Transmuxer was getting too busy.
Working examples of segmented mp4s have included an sdtp box, even though it's duplicative of information in the trun box. It's easy to generate however, so add it to the inspector and generator, and update the transmuxer tests to expect sane output.
Add in a parser to unpack NAL byte streams. Hook up the old exponential Golomb decoder and parse media metadata out of the first sequence parameter set. Add more checks to test on the example segment transformation.