RFR: 8277309: Add support for H.265/HEVC to HTTP Live Streaming [v3]
Alexander Matveev
almatvee at openjdk.java.net
Fri Mar 18 03:12:37 UTC 2022
On Fri, 18 Mar 2022 02:20:11 GMT, Alexander Matveev <almatvee at openjdk.org> wrote:
>> - Added support for fragmented MP4 with HEVC/H.265, H.264 and AAC.
>> - Added support for elementary AAC streams without any container for audio only streams.
>> - Added "aacparse" plugin from GStreamer. Required on Linux, since decoder cannot handle AAC elementary streams directly. DirectShow decoder works without it.
>> - DirectShow H.264 decoder on Windows and H.265/H.264 decoder on Linux will be reloaded when fMP4 stream changes resolution. Dynamic format change did not worked for these streams on Windows and Linux.
>
> Alexander Matveev has updated the pull request incrementally with one additional commit since the last revision:
>
> 8277309: Add support for H.265/HEVC to HTTP Live Streaming [v3]
Fixed several issues found during additional testing:
- sendHeader was true by default which caused sending first and second segment together for MP2TS and MP3/AAC elementary streams. This variable should be true only for fragmented MP4.
- Removed G_SIGNAL_NO_RECURSE flag from javasource signals. From GLib doc "G_SIGNAL_NO_RECURSE - Signals being emitted for an object while currently being in emission for this very object will not be emitted recursively, but instead cause the first emission to be restarted." Basically it caused skipping data segments since in some cases loadNextSegment() was called twice. We do use signal mechanism from separate thread when reading duration. This issue is intermittent. All GStreamer provided elements do not use G_SIGNAL_NO_RECURSE flag, so not sure why javasource was using it.
- Fixed duration calculation. We should not count duration of header, since header does not contain any data.
- Added code which will adjust PTS during rendering to start with 0, otherwise (after duration fix) we will drop frames with PTS > duration. Note: In fMP4 HLS streams PTS starts with N and goes upto duration + N. Our rendering code expects start with 0 and stop at duration.
- Minor code cleanup and removal of unnecessary "if (segment.start != 0)" check in hlsprogressbuffer.
-------------
PR: https://git.openjdk.java.net/jfx/pull/726
More information about the openjfx-dev
mailing list