无法使用 Android 上的 ExoPlayer 或 Mac 上的 Quicktime 通过网络摄像头播放 MPEG-TS

无法使用 Android 上的 ExoPlayer 或 Mac 上的 Quicktime 通过网络摄像头播放 MPEG-TS

我正在尝试使用 FFmpeg 将我的网络摄像头流式传输到基于 HttpLiveStreaming(HLS) 的 Android 设备。为了在 Android 上播放 MPEG-TS,我使用了 ExoPlayer。


FFmpeg 流媒体命令:ffmpeg -f avfoundation -video_size 1280x720 -framerate 30 -i "0" -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test

当我使用 VLC 播放 MPEG-TS 时,一切正常。但是,我使用 Android 上的 ExoPlayer 或 Mac OS 上的 Quicktime(Safari)播放失败。然后我尝试找出原因。


我尝试以同样的方式使用 FFmpeg 传输 mp4 视频。例如:ffmpeg -re -i test.mp4 -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test

我可以使用 ExoPlayer 和 Quicktime 播放它。


我发现这两种情况之间的唯一区别是,网络摄像头的捕获格式是 YUY2,而 mp4 视频是 YUV420,并且它们使用了不同的 H264 编码器。我猜YUY2和YUV420的H264解码器不一样。

我不确定我的推断是否正确,解决这个问题的唯一方法是在流式传输之前将 YUY2 转换为 YUV420。

我希望使用 Mac 的人可以尝试使用与我相同的方式流式传输 Facetime 相机,看看是否可以在 Safari 中播放。

答案1

最后,我找到了解决方案。正如我推断的那样,我需要在 H264 编码和流式传输之前将 YUY2 转换为 YUV420。因此命令应该是ffmpeg -f avfoundation -pix_fmt uyvy422 -video_size 1280x720 -framerate 30 -i "0" -pix_fmt yuv420p -vcodec libx264 -preset veryfast -f flv rtmp://localhost:1935/hls/test

谢谢

相关内容