首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将/dev/video0的输出转储到fifo文件

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

Stack Overflow用户
提问于 2016-06-09 16:27:44
回答 2查看 2K关注 0票数 1

我正在尝试通过管道将/dev/video0发送到out.raw,然后立即在omxplayer中读取它。但是我在omxplayer中没有看到图片(我用mplayer out.raw ->播放out.raw,但是没有显示图片)

我的命令:

代码语言:javascript
复制
mkfifo out.raw
mplayer tv:///dev/video0 -dumpstream -dumpfile out.raw &
omxplayer out.raw

你知道为什么我拍不到照片吗?

EN

回答 2

Stack Overflow用户

发布于 2017-04-06 09:10:22

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

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

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

但是,这指定MEncoder应该以MJPEG格式从输入设备读取,并简单地将帧复制到先进先出。

播放器读取先进先出没有准备好截断的MJPEG,所以你应该尝试转码它:-ovc x264 -of avi

无论如何,玩FIFO都会不止一次遇到问题,除非播放器非常小心地处理截断的帧,并且您的输出包含许多关键帧。

如果没有从FIFO读取任何内容,则写入FIFO的操作最终会阻塞。

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

票数 3
EN

Stack Overflow用户

发布于 2017-04-07 08:02:03

如果可能的话,我会使用VLC。

代码语言:javascript
复制
cvlc v4l2:///dev/video0 --sout=file/ps:go.mpg 

  • VLC也可以在命令行界面中工作(不仅仅是图形用户界面),它现在似乎被称为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

代码语言:javascript
复制
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分钟的时间消磨时间,幸运的是我发现了你的问题,我决定回答。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37720612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档