使用 FFmpeg 进行无损视频流传输

使用 FFmpeg 进行无损视频流传输

我正在寻找两个 ffmpeg 实例之间的流视频(可能使用 udp),而不会因编码而导致任何潜在的质量损失。我不太担心带宽,我只希望流是实时的并且与输入具有相同的质量。到目前为止,我尝试过的两种主要方法是使用huffyuv和使用进行编码rawvideo。我能够使用这两个选项进行编码,写入可以正常播放的文件,但我无法创建可以用其中任何一个打开的流。我还看到有x264一个无损编码选项,但由于许可限制,这对我来说不是一个很好的选择。

以下是我成功写入文件的命令行:

ffmpeg -i /dev/video0 -c:v huffyuv -f avi out.avi
ffmpeg -i /dev/video0 -c:v rawvideo -f nut out.nut

以下是我不太成功的流媒体尝试:

ffmpeg -i /dev/video0 -c:v huffyuv -f udp://239.255.76.67:1130?ttl=1
ffmpeg -i /dev/video0 -c:v rawvideo -f nut udp://239.255.76.67:1130?ttl=1

然后尝试流式传输我尝试让接收实例自动检测并强制流式传输格式:

ffplay udp://239.255.76.67:1130
ffplay -f avi -vcodec huffyuv udp://239.255.76.67:1130
ffplay -f nut -vcodec rawvideo udp://239.255.76.67:1130

对于所有这些组合,我都会得到相同的错误:

udp://239.255.76.67:1130: Invalid data found when processing input

答案1

如果在启动服务实例之前启动接收实例,则可以使用

ffmpeg -i /dev/video0 -c:v huffyuv -f avi udp://239.255.76.67:1130?ttl=1或者用 nut、flv、matroska 代替 avi。您将无法停止并重新启动接收实例。

如果您需要适应接收实例的延迟启动或重新启动,那么您必须使用像 mpegts 这样的流媒体格式。MPEG-TS 不支持 huffyuv 或 rawvideo。那么您只能使用 H.264/5。

接收实例很简单ffplay udp://239.255.76.67:1130

相关内容