首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nginx和ffmpeg的RaspberryPi HLS流;v4l2错误: ioctl(VIDIOC_STREAMON):协议错误

nginx和ffmpeg的RaspberryPi HLS流;v4l2错误: ioctl(VIDIOC_STREAMON):协议错误
EN

Stack Overflow用户
提问于 2021-01-21 09:00:31
回答 1查看 1.4K关注 0票数 0

我正在尝试用Raspberry Pi ( 4B型,4GB RAM)和普通的网络摄像头(集成Mic)来实现婴儿监控。我遵循了本教程:https://github.com/DeTeam/webcam-stream/blob/master/Tutorial.md

简要介绍:

  1. I安装并配置了一个nginx服务器,启用了rtmp模块。
  2. i安装了具有此配置的ffmpeg -启用-gpl--启用-非自由-启用-mmal-mmal试图流;)

nginx的配置似乎是工作的(有时流工作,服务器启动时没有任何复杂,当服务器启动和运行时,就会显示网页)。ffmpeg的配置似乎也很好,因为流有时会工作.

我尝试了几个不同的ffmpeg命令;它们有时都在工作,有时会导致错误。该命令如下所示:

代码语言:javascript
复制
ffmpeg -re
-f v4l2
-i /dev/video0
-f alsa
-ac 1
-thread_queue_size 4096
-i hw:CARD=Camera,DEV=0
-profile:v high
-level:v 4.1
-vcodec h264_omx
-r 10
-b:v 512k
-s 640x360
-acodec aac
-strict
-2
-ac 2
-ab 32k
-ar 44100
-f flv
rtmp://localhost/show/stream;

注意:我重新排列了代码,使其更容易阅读。在终点站,一切都在一条线上。注意:使用-f video4linux2而不是-f v4l2时没有差别。

摄象机由系统识别:

代码语言:javascript
复制
pi@raspberrypi:~ $ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
    /dev/video10
    /dev/video11
    /dev/video12

bcm2835-isp (platform:bcm2835-isp):
    /dev/video13
    /dev/video14
    /dev/video15
    /dev/video16

HD Web Camera: HD Web Camera (usb-0000:01:00.0-1.2):
    /dev/video0
    /dev/video1

当只使用-i /dev/video0时,音频传输就无法工作。arecord -L的输出是:

代码语言:javascript
复制
pi@raspberrypi:~ $ arecord -L
default
    Playback/recording through the PulseAudio sound server
null
    Discard all samples (playback) or generate zero samples (capture)
jack
    JACK Audio Connection Kit
pulse
    PulseAudio Sound Server
usbstream:CARD=Headphones
    bcm2835 Headphones
    USB Stream Output
sysdefault:CARD=Camera
    HD Web Camera, USB Audio
    Default Audio Device
front:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    Front speakers
surround21:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    Direct sample mixing device
dsnoop:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    Direct sample snooping device
hw:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    Direct hardware device without any conversions
plughw:CARD=Camera,DEV=0
    HD Web Camera, USB Audio
    Hardware device with all software conversions
usbstream:CARD=Camera
    HD Web Camera
    USB Stream Output

这就是我添加-i hw:CARD=Camera,DEV=0的原因。

正如上面提到的,在这种配置和命令下,它工作了几次非常好。但是,通常情况下,当开始流时,我会收到以下错误消息:

代码语言:javascript
复制
pi@raspberrypi:~ $ ffmpeg -re -f video4linux2 -i /dev/video0 -f alsa -ac 1 -thread_queue_size 4096 -i hw:CARD=Camera,DEV=0 -profile:v high -level:v 4.1 -vcodec h264_omx -r 10 -b:v 512k -s 640x360 -acodec aac -strict -2 -ac 2 -ab 32k -ar 44100 -f flv rtmp://localhost/show/stream
ffmpeg version N-100673-g553eb07737 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)
  configuration: --enable-gpl --enable-nonfree --enable-mmal --enable-omx-rpi --extra-ldflags=-latomic
  libavutil      56. 63.101 / 56. 63.101
  libavcodec     58.117.101 / 58.117.101
  libavformat    58. 65.101 / 58. 65.101
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 96.100 /  7. 96.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
[video4linux2,v4l2 @ 0x2ea4600] ioctl(VIDIOC_STREAMON): Protocol error
/dev/video0: Protocol error

当我转到/dev/video1 (因为这也是v4l2-ctl --list-devices的输出)时,我会得到以下错误消息:

代码语言:javascript
复制
pi@raspberrypi:~ $ ffmpeg -re -f v4l2 -i /dev/video1 -f alsa -ac 1 -thread_queue_size 4096 -i hw:CARD=Camera,DEV=0 -profile:v high -level:v 4.1 -vcodec h264_omx -r 10 -b:v 512k -s 640x360 -acodec aac -strict -2 -ac 2 -ab 32k -ar 44100 -f flv rtmp://localhost/show/stream
ffmpeg version N-100673-g553eb07737 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)
  configuration: --enable-gpl --enable-nonfree --enable-mmal --enable-omx-rpi --extra-ldflags=-latomic
  libavutil      56. 63.101 / 56. 63.101
  libavcodec     58.117.101 / 58.117.101
  libavformat    58. 65.101 / 58. 65.101
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 96.100 /  7. 96.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
[video4linux2,v4l2 @ 0x1aa4610] ioctl(VIDIOC_G_INPUT): Inappropriate ioctl for device
/dev/video1: Inappropriate ioctl for device

当使用video0输入,摄像头的发光二极管识别访问是持续的。当使用video1时没有。

几个小时几天的谷歌,眼泪和威士忌,为了我的肝脏,我的婚姻,我的身心健康,我非常辛酸地请求你的帮助.到底发生了什么?我能做些什么来让它发挥作用?

谢谢大家:)

更新1:

使用ffmpeg的完整路径的anything...

  • /dev/video0和/dev/video1 1没有改变everybody

  • sudo ffmpeg ...的访问权限,也不会改变

  • ,问题似乎还处于“早期阶段”。将命令解压缩到ffmpeg -i /dev/video0会导致相同的问题(

)

更新2:

当我第一次启动另一个需要访问摄像头的应用程序时,一切似乎都在正常工作。可能是一些驱动程序问题,但是当我寻找带有lsmod的加载模块时,在启动应用程序之前和之后都没有任何更改.任何仍然感激的帮助..。

更新3:

我正在检查dmesg的输出。

当我启动第一个应用程序时,我收到了以下消息:

uvcvideo: Failed to query (GET_DEF) UVC control 12 on unit 2: -32 (exp. 4).

当我开始ffmpeg的时候,什么事都没有发生,但一切都成功了.

EN

回答 1

Stack Overflow用户

发布于 2021-10-05 23:51:28

我收到了同样的问题,注意到您的更新2,并执行了以下操作(python):

代码语言:javascript
复制
for i in range(3):
    cam1 = cv2.VideoCapture(0)
    ret, frame = cam1.read()
    cam1.release()
cam1 = cv2.VideoCapture(0)

现在我仍然收到错误信息(只有一次),但相机工作正常。

不知道为什么也不知道怎么做但是..。这就是(显然)

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

https://stackoverflow.com/questions/65824061

复制
相关文章

相似问题

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