2

如何“开球”输出 /dev/videox 设备,以便两个程序可以同时使用实时视频流?

我想一次将实时视频从 /dev/video1:input=1:norm=NTSC 发送到两个程序(mplayer 和 mencoder),以便在 mencoder 录制的同时获得不延迟的实时视图。

我知道如何从 mencoder 获取刚刚编码的输出并播放它,但这会引入几帧的延迟(太多)。我被告知 VLC 可以做到这一点,但也并非没有明显的滞后。

我现在能做的最好的就是让 mplayer 将其播放到屏幕上,同时使用“avconv -f x11grab”从显示器上抓取视频并对其进行编码。这行得通(它不会增加延迟),但从显示器上抓取视频很慢 - 我最终得到大约 10 fps 而不是 30 fps。

必须有一些直接的方法将 /dev/video1 “tee”到两个虚拟设备中,以便 mplayer 和 mencoder 可以同时读取它们(其中没有一个抱怨设备“忙”)。

那是什么方法?

4

1 回答 1

0

不完全符合您的要求,而是在一个程序中完成:(GStreamertry gst-launch。它对视频流的bash作用与对输入/输出管道的作用相同。

GStreamer 的camerabin2插件可以毫无延迟地完成您需要的工作:播放和录制视频流。虽然目前它只能从客户端代码中使用,而不是从gst-launch.

如果您需要做一些更复杂的事情,例如通过 RTP 网络协议编码和发送视频流,GStreamer 确实有一个tee过滤器。

于 2013-12-29T12:39:14.870 回答