通过 Shell 访问网络摄像头流

通过 Shell 访问网络摄像头流

我正在编写一个应用程序(在 ARM Ubuntu 上运行),该应用程序需要能够对来自网络摄像头的视频流进行图像处理。获取数据的最简单方法是通过进程上的输出流,因此我计划托管一个子进程,运行命令并使用输出。我目前的计划是使用 FFMPEG,但我可以使用任何适用于 ARM 的命令行工具。我的问题实际上分为两部分:

  1. 我需要从命令行使用什么 FFMPEG(或其他实用程序,如果有更好的)命令来从网络摄像头获取像素数据流?
  2. 输出将采用什么格式(最好只有 RGB 数据,没有编码或标题)?我需要在我的应用程序中解析它,并且需要知道编码格式。

任何信息,将不胜感激!

答案1

使用 FFmpeg 和video4linux2,您可以获取几乎任何网络摄像头输入。确保使用最新版本ffmpeg下载页面自己编译。您可以使用以下方法检查相机帧大小和帧速率:

v4l2-ctl --list-formats-ext

例如,如果你发现网络摄像头提供的帧速率和图片大小:

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 \
-c:v rawvideo -f rawvideo -pix_fmt yuv420p -

这将从相机以 640×480 像素的速度捕获 25fps 的视频,/dev/video0并将使用 YUV 4:2:0 平面像素格式编码的原始 YUV 帧输出到标准输出。rawvideo编码器和格式会处理这些。不会有标题。

您可以在此处更改:

  • 设置不同的帧速率或尺寸。

  • 这里,-最后将数据发送到标准输出,但如果您愿意,也可以选择一个文件。

  • 要查看其他可用的像素格式,请运行ffmpeg -pix_fmts。它们的字节顺序解释如下fourcc.org。如果您确实想要 RGB 数据(尽管我怀疑这不是您的相机默认输出),您可以使用-pix_fmt rgb24,例如。

答案2

一定要检查 VLC 的命令行选项。我不太熟悉它的输出流,但我似乎读到过它可以完成你想做的事情。

VLC 主页

相关内容