将/ dev / video0的输出转储到fifo文件

时间:2016-06-09 08:27:44

标签: linux file save v4l2 mplayer

我正在尝试将/ dev / video0传递给out.raw,然后立即将其读入 omxplayer。但我在omxplayer中没有得到任何图片(我试过同样的 mplayer out.raw - >播放。但没有显示图片)

我的命令:

mkfifo out.raw
mplayer tv:///dev/video0 -dumpstream -dumpfile out.raw &
omxplayer out.raw

知道为什么我没有拍照?

2 个答案:

答案 0 :(得分:3)

在这种情况下,你的video0设备不清楚是什么,因为mplayer会以不同的方式初始化它。

其次,在很多情况下,您会发现即使将out.raw更改为普通文件,mplayer也不会写任何内容。

对于我的笔记本电脑摄像头,使用以下内容将正确地将数据发送到FIFO: mencoder tv:// -tv driver=v4l2:width=960:height=720:fps=15:outfmt=mjpeg -nosound -ovc copy -o out.fifo

但是,这指定MEncoder应该从INPUT设备读取格式为MJPEG,并简单地将帧复制到fifo。

读取FIFO的播放器没有为截断的MJPEG做好准备,因此您应该尝试对其进行转码:-ovc x264 -of avi

无论如何,除非玩家非常小心处理截断的帧,并且你的输出中包含大量的关键帧,否则你将不得不多次尝试使用FIFO。

如果没有从FIFO读取数据,写入它最终会阻止。

也许如果你澄清为什么要使用FIFO,可能会有更好的解决方案。

答案 1 :(得分:1)

如果可能,我会使用VLC。

cvlc v4l2:///dev/video0 --sout=file/ps:go.mpg 
  • VLC也在CLI中运行(不仅仅是GUI),它现在看起来像cvlc(TIL:)
  • 如果您愿意,它还可以通过HTTP或多播进行转码和流式传输。

参考:https://wiki.videolan.org/Documentation:Streaming_HowTo/Receive_and_Save_a_Stream/

修改 好吧,我尝试了我的古老Linux Mint(vlc 2.0.6和mplayer而不是omxplayer)。 mux = XXX可以是您选择的另一个,请参阅VLC Muxers

mkfifo /tmp/out.raw
cvlc <video_input>  --sout="#duplicate{dst=std{access=file,dst='/tmp/out.raw',mux=avi},dst=nodisplay}" 
mplayer /tmp/out.raw

PS:我多年没有使用过VLC,而且上面的测试未经测试。我只有5分钟的时间来杀人,并且幸运地发现了我的问题,我决定回答。