5

我已经安装了 ffmpeg 和 mjpeg-streamer。后者从 /tmp/stream 读取 .jpg 文件并通过 http 将其输出到网站上,因此我可以通过 Web 浏览器流式传输该文件夹中的任何内容。

我编写了一个 bash 脚本,它不断地从网络摄像头中捕获一帧并将其放入 /tmp/stream:

while true
do
    ffmpeg -f video4linux2 -i /dev/v4l/by-id/usb-Microsoft_Microsoft_LifeCam_VX-5000-video-index0 -vframes 1 /tmp/stream/pic.jpg
done

这很好用,但速度很慢(~1 fps)。为了加快速度,我想使用一个 ffmpeg 命令来不断更新 .jpg,比如说 10 fps。我尝试的是以下内容:

ffmpeg -f video4linux2 -r 10 -i /dev/v4l/by-id/usb-Microsoft_Microsoft_LifeCam_VX-5000-video-index0 /tmp/stream/pic.jpg

然而,这 - 可以理解 - 导致错误消息:

[image2 @ 0x1f6c0c0] Could not get frame filename number 2 from pattern '/tmp/stream/pic.jpg'
av_interleaved_write_frame(): Input/output error

...因为输出模式对连续的图像流不利。

是否可以使用 ffmpeg 仅流式传输到一个 jpg?

谢谢...

4

2 回答 2

4

您可以使用以下-update选项:

ffmpeg -y -f v4l2 -i /dev/video0 -update 1 -r 1 output.jpg

image2 文件复用器文档:

-update number

If number is nonzero, the filename will always be interpreted as just a
filename, not a pattern, and this file will be continuously overwritten
with new images.
于 2013-07-13T22:08:59.943 回答
2

可以通过以下方式实现我想要的:

./mjpg_streamer -i "input_uvc.so -r 1280×1024 -d /dev/video0 -y" -o "output_http.so -p 8080 -w ./www"

...从 mjpg_streamer 的目录中。当使用地址时,它会通过在浏览器中显示流来为您完成所有令人讨厌的工作:http://{IP-OF-THE-SERVER}:8080/ 它也足够轻巧,可以在 Raspberry Pi 上运行。

是一个很好的设置教程。

谢谢您的帮助!

于 2013-07-18T11:01:03.890 回答