来自原始YUV444的FFMPEG h.264流到VLC产生黑屏和音频噪声


1

我使用stdout(管道格式:管道< -Y< -U< -V整个帧)将原始YUV444 640x480帧从C ++程序内部管理到ffmpeg。 ffmpeg使用h.264对它们进行编码,并通过UDP将视频流式传输到我选择的IP。

当我没有流式传输并将录像设备上的视频保存为带有ffmpeg的-mp4文件时,一切正常 - 但是当我通过网络流式传输并尝试在VLC中接收时,会收到流并且视频屏幕下的播放计时器运行, 但图像为黑色,没有显示视频。 我的音频输出也有一些噼里啪啦的声音。原始视频没有音轨。

我的ffmpeg设置如下:

ffmpeg -y -loglevel verbose -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 -f mpegts udp://192.168.150.1:20001

在VLC(GUI)中,我只使用udp:// @:20001的“开放网络流”。端口是开放的,我用一个简单的虚拟发送器/接收器测试它。视频录制的几乎相同的cli参数在写入文件并下载时会产生完美的可播放视频:

ffmpeg -y -loglevel verbose -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 video.mp4

如果我尝试使用流式传输相同的录制视频

ffmpeg -i video.mp4 -v 0 -vcodec mpeg4 -f mpegts udp://192.168.150:20001

我再次得到一个黑屏,就像上面一样。

VLC日志输出将我的流识别为mp3,因此可能要归咎于流类型识别。但为什么?

这里有 ffmpeg控制台输出 VLC日志

我究竟做错了什么?

PS:在这里从Stack Overflow移动这个问题,因为它没有得到任何答案,旧的未答复的副本被删除。


其他玩家收到它吗?
Gyan

哇噢!你完全走在正确的轨道上。我尝试了MPlayer和PotPlayer(这是一个名字)和PotPlayer可以玩它!问题仍然存在:为什么不是VLC?
GerbGerb

我明天会调查一下。
Gyan

更新:我也试过OpenCV(Python3)的VideoCapture。这会产生严重损坏的图像和大量的“解码时出错”。可能是VLC和OpenCV使用相同的解码器,这与h.264有问题吗?
GerbGerb

似乎与此有关: trac.videolan.org/vlc/ticket/21024 。降级VLC或使用其他玩家。
Gyan

Answers:


1

虽然潜在的问题尚未解决,但@Gyans提示帮助我解决了我的问题。使用其他播放器(PotPlayer)或旧版VLC使流显示工作,这就是我所需要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.