我想使用 ffmpeg 从我的网络摄像头创建 HLS 直播。
我有这个命令,它创建 HLS 用于在输入中流式传输视频的文件。
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
当在 Web 服务器提供的文件夹中运行时,我可以使用 Android 应用程序观看流外星播放器。
我还有这个命令,它获取我的网络摄像头输入并将其放入视频文件中。
ffmpeg \
-f v4l2 -video_size 640x480 \
-i /dev/video0 \
output.mkv
我尝试将这两个命令结合起来。
当我尝试使用以下命令通过 HLS 流式传输我的网络摄像头时,HLS 文件正在生成,但 Android 应用程序上的显示是错误的。
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
Android 应用程序显示黑屏并出现故障。
我尝试添加,-b:v 100M -b:a 128k
因为该消息Bandwidth info not available, set audio and video bitrates
是由 ffmpeg 显示的。
然后我尝试-c:v libx264 -crf 21 -preset veryfast
根据其他 HLS 教程进行添加,但问题仍然存在。
因为我的前两个命令有效,所以我认为 ffmpeg 理解输入和输出流的格式。
为何流不能正常工作?
编辑2:
生成的 .m3u8 可以用 vlc 读取。问题可能来自 ExoPlayer 不理解格式。如果是这种情况,我将关闭帖子。
答案1
在命令中添加 -vf format=yuv420p 解决了该问题。