video-dev / hls.js

HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.
https://hlsjs.video-dev.org/demo
Other
14.81k stars 2.57k forks source link

Issue in HEVC HLS stream reception #4726

Closed ParasPidurkar closed 2 years ago

ParasPidurkar commented 2 years ago

Hi I have segmented the H265 video using ffmpeg command as follows ffmpeg -i ./Big_BunnyHECV.mp4 -c:a aac -strict experimental -c:v libx265 -s 480x360 -aspect 16:9 -f hls -hls_list_size 1000000 -hls_time 2 output.m3u8 the stream reception is working for h264 video but for h265 video receiver is able to fetch the m3u8 file but not the data segments of the h265 video .while the same process is running perfectly with h264 video

philcluff commented 2 years ago

Hi @ParasPidurkar, playback of HEVC will depend on the decoders available on the device that you're using HLS.js on.

What browser and OS are you testing playback on? Could you provide a test stream?

Thanks.

ParasPidurkar commented 2 years ago

@philcluff Hi I am using a MS edge browser .using the video uri i am able to play the video (https://test-videos.co.uk/vids/bigbuckbunny/mp4/h265/1080/Big_Buck_Bunny_1080_10s_30MB.mp4) on edge but if i segment the same video using above mentioned ffmpeg command and stream it using hls.js the stream is not playing locally on edge browser .I am able to see that the m3u8 file is fetched on stream reception but the video ts segments are not fetched .

philcluff commented 2 years ago

Hi @ParasPidurkar, do you have the HEVC extension installed from the Windows app store?

What does this page show for HEVC codecs?

https://privacycheck.sec.lrz.de/active/fp_cpt/fp_can_play_type.html#other_video_codecs

Can you provide the HLS manifest and segment URLs?

philcluff commented 2 years ago

Hey @ParasPidurkar, could you try changing your ffmpeg command to include:

-hls_segment_type fmp4

The command you're running right now will generate HEVC in transport stream segments, which HLS.js does not support.

Thanks.

ParasPidurkar commented 2 years ago

@philcluff output.zip I have attached my ts files and manifest file .I am using a Linux subsystem and i have not used the HEVC extension. Can you please instruct on what changes needs to be done for creating a manifest file with fmp4.

ParasPidurkar commented 2 years ago

@philcluff can you please clarify why the browser is able to play the video when provided with video url and not with manifest file . The Edge works with MSE for fragmented mp4 but what changes do i need to do to provide the same support for chromium.I am trying to use the HLS stream on a yocto based OS so in this scenario i have only a chromium based browser so what are the things i need to do to enable HEVC HLS streaming ?

philcluff commented 2 years ago

Hi @ParasPidurkar, I added the flags you need to create fmp4 outputs above.

The full command would be:

ffmpeg -i ./Big_BunnyHECV.mp4 -c:a aac -strict experimental -c:v libx265 -s 480x360 -aspect 16:9 -f hls -hls_list_size 1000000 -hls_time 2 -hls_segment_type fmp4 output.m3u8

As general advice outside of HLS.js, HEVC is not a widely supported codec in browsers, outside of Edge on Windows and Safari on MacOS and iOS. In general you'll always need a h.264 fallback file if you want the content to be widely playable. I'm not configuration that'll allow you to play HEVC in a chromium browser on Linux.

You can see browser support for HEVC here: https://caniuse.com/hevc

Thanks.

ParasPidurkar commented 2 years ago

@philcluff I have already tested with fragmented mp4 format on edge. Thanks for your support on the issueq

ParasPidurkar commented 2 years ago

@philcluff 1I have already tested with fragmented mp4 format on edge. Thanks for your support on the issueq

philcluff commented 2 years ago

No problem, I'll close out this issue - HLS.js is working as expected here.

Thanks!