首页 > 解决方案 > ffmpeg 覆盖 v4l2-ctl 配置 -> 如何将真正的原始设备复制到网络?

问题描述

我需要对 tcp 套接字副本做一个真实的设备,例如:

cat /dev/video0 | /bin/nc 127.0.0.1 8000 -w 1

这个非常基本的命令行适用于我的情况。我想做同样的事情,但使用 ffmpeg 进程。目的是标准化流处理过程,在这种情况下,从设备到网络的基本原始副本,以及从任何源到网络的高级转码,始终使用相同的 ffmpeg 过程。

我在 ffmpeg 之前使用 v4l2-ctl 来进行很多我想保留的配置。

我试过了 :

ffmpeg -loglevel debug -i /dev/video0 -f rawvideo tcp://127.0.0.1:8000

ffmpeg -loglevel debug -f v4l2 -i /dev/video0 -f rawvideo tcp://127.0.0.1:8000

这里的问题 ffmpeg 杀死了我的 v4l2 配置,我不想在我的代码中设置两次(v4l2-ctl 接口 + ffmpeg 接口)。

我也试过:

ffmpeg -loglevel debug -f rawvideo -i /dev/video0 tcp://127.0.0.1:8000

ffmpeg -loglevel debug -f rawvideo -i /dev/video0 -f rawvideo tcp://127.0.0.1:8000

我总是得到这个 stderr + exit :

[IMGUTILS @ 0x7ec1d5f0] Picture size 0x0 is invalid
[AVIOContext @ 0x1e8bb40] Statistics: 26 bytes read, 0 seeks
/dev/video0: Invalid argument

我也试过

-c:v copy

上述所有组合的参数均未成功:(

如何使用 ffmpeg 将原始二进制副本(如使用 NetCat 的“cat”或“dd”)从设备到套接字(不杀死 v4l2 配置)?

帕斯卡

标签: ffmpegstreamingtranscodevideo4linux

解决方案


推荐阅读