我正在尝试将/ dev / video0传递给out.raw,然后立即将其读入 omxplayer。但我在omxplayer中没有得到任何图片(我试过同样的 mplayer out.raw - >播放。但没有显示图片)
我的命令:
mkfifo out.raw
mplayer tv:///dev/video0 -dumpstream -dumpfile out.raw &
omxplayer out.raw
知道为什么我没有拍照?
答案 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
cvlc
(TIL:)参考: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分钟的时间来杀人,并且幸运地发现了我的问题,我决定回答。