I want to create a HLS live stream from my webcam using ffmpeg.
I have this command which creates files used by HLS to stream the video in input.
sudo ffmpeg \
-i path/to/video.mp4 \
-preset slow \
-f hls -hls_list_size 2 \
-hls_flags independent_segments -hls_flags delete_segments \
-hls_segment_type mpegts \
-hls_segment_filename data%02d.ts \
-master_pl_name master.m3u8 out1
When ran inside a folder served by a web server, I can watch the stream from an Android application using ExoPlayer.
I also have this command which takes my webcam input and place it into a video file.
ffmpeg \
-f v4l2 -video_size 640x480 \
-i /dev/video0 \
output.mkv
I tried to combine both of these commands.
When I try to stream my webcam using HLS with the following command, the HLS files are being generated, but the display on the android app is wrong.
sudo ffmpeg \
-f v4l2 -video_size 640x480 \
-i /dev/video0 \
-c:v libx264 -crf 21 -preset veryfast \
-b:v 100M -b:a 128k \
-f hls -hls_list_size 2 \
-hls_flags independent_segments -hls_flags delete_segments \
-hls_segment_type mpegts \
-hls_segment_filename data%02d.ts \
-master_pl_name master.m3u8 out1
The android app show a black screen with glitches.
I tried adding -b:v 100M -b:a 128k because the message Bandwidth info not available, set audio and video bitrates was displayed by ffmpeg.
Then I tried adding -c:v libx264 -crf 21 -preset veryfast based on others HLS tutorial but the problem persists.
Because my two first command worked, I thought that ffmpeg understood the format of the input and output streams.
Why isn't the stream working properly ?
Edit1 : Image showing the output on the ExoPlayer player
Edit2 :
The .m3u8 generated is readable with vlc.
The problem might come from ExoPlayer not understanding the format.
I'll close the post if it is the case.