|
今天准备发贴了,才看见这个:http://www.shumeipai.net/thread-440-1-1.html 有空我再去试试。
买一个USB 摄像头,在淘宝上选择无驱类型的。其实是windows 内置驱动,摄像头实现 UVC 的协议。我淘宝买了一个 天敏 N82, 30元。 RasPi 也能认识。不放心可以从 http://linux-uvc.berlios.de/ 看支持列表。 | 昨天和配置和yeelink 联动了一次,效果还是刚刚的。
今天琢磨了比较长时间,才最终搞定视频监控,效果还是不错的。
先尝试了 spcaview, 搞半天,问题太多。后来基本知道原因,spcaview 是基于 v4l1 的模型,这个明确在2.6.38 被丢弃了。 | mjpg-streamer 用了v4l2的驱动模型。结果先用发布包,编译出现问题,好像也是基于v4l1的驱动。 尝试check out 最新的 mjpg-streamer , 发现果然切换到了v4l2了。
1. 编译mjpg-stream
make clean all
报错,大概是libjpeg 库没有找到。
2. 安装 需要的库
sudo apt-get install libjpeg62-dev
3. 再次编译mjpg-stream
make
make install
成功,大喜,以为可以工作了。
执行报告 LD_LIBRARY_PATH 有问题。
4. 添加路径。
这个稍微有点出乎意料,软件安装在/usr/local/bin, /usr/local/lib 的路径下,按道理应该默认就有。 echo $PATH, 果然没有,手动添加。
在/etc/profile 下,添加
LD_LIBRARY_PATH=/usr/local/lib
执行正常,用浏览器连接,发现什么都没有。
5. 重新设置 mjpg_stream的参数。
mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640x480"
出现了 unable to set format, 尝试了大量的参数,都是失败。
寻找源码,发现是在开始就报错。
ret = xioctl(vd->fd, VIDIOC_S_FMT, &vd->fmt);
if(ret < 0) {
fprintf(stderr, "Unable to set format: %d res: %dx%dundefined", vd->formatIn, vd->width, vd->height);
goto fatal;
}
着了大量的资料,基本确定了是由于mjpg_stream 对摄像头的编码有特殊的要求导致的。mjpg 只支持 V4L2_PIX_FMT_YUYV and V4L2_PIX_FMT_RGB565 和V4L2_PIX_FMT_MJPEG 。
6. 检查自己的摄像头属性
fswebcam --device /dev/video0 output.jpeg --verbose
确认是能支持 YUYV, 但是不支持硬件MJPEG 的编码。 不支持硬件编码就慢一点
7. 重新设置 参数
input_uvc 支持 的y 参数
[-y | --yuv ]..........: enable YUYV format and disable MJPEG mode
mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640x480 -y " -o "output_http.so"
终于启动了,报告了一堆warning.
8. 连接看结果。
http://192.168.1.1:8080/?action=stream
大喜, 终于看见视频了。
9. mjpg_streamer 完整的命令
mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640x480 -y " -o "output_http.so -p 8080 -w /www "
后面的www 是在这个mjpg_streamer 完整的项目下的一个web 网页,他示范了如果把这个流 配置到网页里面,这样就直接能在网页上看见动态的效果。
其实很简单,就是类似<src="?action=stream"/> , 也可以产生拍一张照片的效果<src="?action=snapshot/>
虽然自己绕了很多弯,才搞定了,但是还是学到了不少东西。
|
|