【转】摄像头用mjpg-stream失败的看过来_Detective_ALong_新浪博客

目前市面上有很多摄像头,而且大部分都不是Z301,且免驱。如果选取的摄像头不合适,在使用mjpg-stream过程中,就会报如下错误:

系统信息如下:
root@OpenWrt:/# ls -lh /dev/video0
crw-r--r--    1 root     root      81,   0 Jan  1 08:00 /dev/video0
root@OpenWrt:/# /etc/init.d/mjpg-streamer start
root@OpenWrt:/# MJPG Streamer Version.: 2.0
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: MJPEG
Unable to set format: Invalid argument
Init v4L2 failed !! exit fatal
i: init_VideoIn failed

从这里可以看出问题就出在摄像头不支持jpeg格式,因为市面上大部分都是支持YUV的,而不是JPEG的。找到问题就好办了,经过查找发现mjpg-stream支持JPEG和YUV两种格式,但是我们拿到的固件都没有对摄像头采编格式的设置(希望各位固件大侠能够加上),所以mjpg-stream就使用默认格式--jpeg。
在/etc/init.d/mjpg-stream 文件中我找到了启动设置,如下:
[ $enabled -gt 0 -a -c $device ] && sleep 3 && $SSD -S -m -p $PIDF -q -x $PROG -- --input "input_uvc.so --device $device --fps $fps --resolution $resolution" --output "output_http.so --port $port -c user:pass" &
请修改为:
[ $enabled -gt 0 -a -c $device ] && sleep 3 && $SSD -S -m -p $PIDF -q -x $PROG -- --input "input_uvc.so --device $device --fps $fps --resolution $resolution  -y" --output "output_http.so --port $port -c user:pass" &
保存后,./mjpg-stream restart
这样就可以了!!哈哈

同时告诉大家motion也是一个不错的选择,因为它的motion.conf文件中包含了多达8种采编格式的选择。
有的朋友会说motion占用资源较多,和mjpg-stream比较如下:
1)进程数   motion:4个   mjpg-stream:4个
2)内存     motion:12%*4    mjpg-stream:8% * 4
3)CPU       motion:51%  mjpg-stream:56%   (因为motion只在图像有变化的情况下才工作)
4)磁盘     motion:只要有图像变化,就产生一个图片文件  mjpg-stream:不占用 (在计划任务中加一个语句 */02 * * * * rm /tmp/cam1/*.jpg 这样就可以每2分钟清一次图片空间,可以保证FLASH不会被塞满)

如果做监控,还是建议使用motion,因为他可以识别画面;如果是用于机器人控制建议用mjpg-stream。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python-opencv调用mjpg-stream视频流可以通过以下几个步骤实现: 1. 首先,我们需要安装python-opencv库。可以使用pip命令进行安装,如下所示: ``` pip install opencv-python ``` 2. 导入所需的库。我们需要导入opencv模块,以及用于从URL中读取视频流的模块urllib.request。代码如下: ```python import cv2 import urllib.request ``` 3. 定义视频流的URL。根据实际情况,将URL替换为相应的mjpg-stream视频流的URL。代码如下: ```python stream_url = "http://example.com/stream/video.mjpg" ``` 4. 使用urllib.request.urlopen()方法打开视频流URL,并读取其中的数据。代码如下: ```python stream = urllib.request.urlopen(stream_url) ``` 5. 使用cv2.VideoCapture()方法创建一个视频捕获对象,然后使用read()方法从视频流中读取每一帧图像数据。代码如下: ```python capture = cv2.VideoCapture(stream) ret, frame = capture.read() ``` 6. 在一个循环中,不断读取视频流中的每一帧图像数据,然后进行后续的处理。例如,可以显示图像、保存图像等。代码如下: ```python while True: ret, frame = capture.read() cv2.imshow("Video Stream", frame) # 处理图像数据的其他操作 if cv2.waitKey(1) == ord('q'): break capture.release() cv2.destroyAllWindows() ``` 在以上步骤中,我们首先安装了python-opencv库,然后导入所需的库,之后定义了视频流的URL。接着,通过urllib.request库打开视频流URL,并创建了一个视频捕获对象。最后,利用一个循环读取每一帧图像数据,并进行相应的处理,例如显示图像或保存图像。最后,释放资源并关闭窗口。 以上就是使用python-opencv调用mjpg-stream视频流的基本过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值