使用 ffmpeg 从网络摄像头创建的 HLS 流无法正确显示

使用 ffmpeg 从网络摄像头创建的 HLS 流无法正确显示

我想使用 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 理解输入和输出流的格式。

为何流不能正常工作?

编辑1:该图显示了 ExoPlayer 播放器上的输出

编辑2:
生成的 .m3u8 可以用 vlc 读取。问题可能来自 ExoPlayer 不理解格式。如果是这种情况,我将关闭帖子。

答案1

在命令中添加 -vf format=yuv420p 解决了该问题。

相关内容