【问题标题】:Get all bytes of stream from webcam after being compressed by codec with ffmpeg?使用ffmpeg通过编解码器压缩后从网络摄像头获取所有字节流?
【发布时间】:2014-08-14 02:05:57
【问题描述】:

我需要从网络摄像头捕获视频流的每个字节 - 在使用 commandline-ffmpeg 使用编解码器对其进行压缩之后。

那么,您能否介绍一下 ffmpeg 命令行的外观以及将输出流导入我由 VB6 或 VB.net 编写的程序的策略? (我需要处理每一个字节!)非常感谢任何建议。


更新:我想知道是否可以将输出保存为硬盘上的“avi”文件,同时使用我的程序读取保存文件的内容。我可以在保存(附加)文件时播放我检索的“avi 文件的一部分”吗?除了“avi”之外,还有什么更好的文件格式可以同时读写(录音和播放)?

或者任何更好/更快的解决方案?

【问题讨论】:

  • 不完全确定,但您需要使用 DirectShow 过滤器。这是捕获音频的方法:ffmpeg -nostats -f dshow -i audio="S/PDIF (M-Audio Delta AP 192)" -acodec mp3 -f mp3 -ab
  • 谢谢!我看到有些人将输出用作 url(例如“192.168.1.123:8090”),但我想将流输入到我的程序中,你知道怎么做吗?
  • 使用 STDIO。最后一个参数应该是-
  • @Brad :你能解释一下STDIO和最后一个参数“-”吗?我刚刚将最后一个参数尝试为“-”,但出现错误“[NULL @ 03714500] 无法为 'pipe:' pipe:: Invalid argument”找到合适的输出格式”
  • 使用我最初发布的命令。您没有指定任何格式,为什么将stdio 放在那里? ffmpeg -f dshow -i video="Lenovo EasyCamera" -f mp4 - 什么的。您至少需要指定输出格式,最好也将输出编解码器设置为您的规范。此外,您不想在命令提示符下运行它,否则原始数据将被转储到您的控制台。如果这样做,至少使用> someFile 输出到文件。

标签: vb.net vb6 ffmpeg streaming


【解决方案1】:

请浏览页面https://trac.ffmpeg.org/wiki/Capture/Webcam 那里清楚地提到了如何使用 ffmpeg 捕获网络摄像头视频。
是的,您可以将 avi 流保存到磁盘并同时从中读取,我相信这在 linux 中是可能的,因为没有文件锁定。
或者您可以写入管道并逐帧从管道中读取它。
用于捕获视频并将其写入管道的 Linux 示例。
从 /dev/video0 读取

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 -f rawvideo -pix_fmt yuv420p pipe1。

你应该首先创建 pipe1 来运行这个命令,现在你可以从这个管道中读取。 Piple 是 linux 中的 FIFO 数据结构,它将在读取数据时刷新。所以这将满足您的要求。

【讨论】:

  • 我已经在 Windows 中解决了这个问题,但您的回答肯定对许多其他 linux 用户有用。
  • @vantrung-cuncon 也可以为 Windows 用户提供答案(Satyam 提供的链接也有 Windows 示例)。
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多