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

标签 linux file save v4l2 mplayer

我正在尝试将/dev/video0 通过管道传输到 out.raw,然后立即读入 omx播放器。但是我在 omxplayer 中没有得到任何图片(我尝试了同样的方法 mplayer out.raw -> 播放 out.raw 但没有显示图片)

我的命令:

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

知道为什么我没有得到照片吗?

最佳答案

在这种情况下,不清楚您的 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 应该以 MJPEG 格式从 INPUT 设备读取,并简单地将帧复制到 fifo。

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

无论如何,除非播放器在处理截断帧的方式上非常小心,并且您的输出包含大量关键帧,否则您将不止一次地遇到问题。

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

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

关于linux - 将/dev/video0 的输出转储到 fifo 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37720612/

相关文章:

linux - sh Linux 中的预期回显截断

java - 将文件数组放入 java 类中

java - 从字节[]转换为文件(十六进制值)时出错

java - 通过 Java 弄清楚 Windows 中的系统文件是什么

objective-c - iOS: 在 UIImageView 中保存图片

Android 保存列表<String>

父子之间通过标准输出和标准输入进行通信

linux - 我的 find 命令用法有什么问题?

android - FileOutputStream 类型中的方法 write(byte[]) 不适用于参数 (Drawable)

linux - Bash switch 语句和执行多个程序