文章目录
- 前言
- 一、硬件准备和硬件设备的查询
- 二、 jpeg库的移植
- 2.1 源码下载
- 2.2 jpeg库的移植
- 三、mjpeg-stream的移植
- 四、测试结果
- 总结
前言
书接上期,我们已经实现了许多功能了,但是对于视频流的实时上传还未实现,本期主要分享的就是如何具体实现网页实时显示摄像头采集到的视频,从而实现安防中监控的功能,这个功能完成后呢,就只剩下一个功能需求了,那就是GPRS模块,能够实现危险报警的功能,也能够打电话警报;只有这些功能完全实现,我们才能完整的结束这个项目!下面来带大家看一下视频流信息究竟是如何一步步上传到网页的呢?
一、硬件准备和硬件设备的查询
首先呢,必须准备一个摄像头,哈哈哈,对头不!接下来教大家来看一下怎样查看摄像头的基本信息,如果是在Windows下,大家只需要把USB摄像头插入电脑的USB接口,显示的信息如下:
大家可以在这里进行查看摄像头的属性信息,主要是查看硬件ID,包括VID和PID,并且可以在UVC官方网站里面看一下是否支持这个摄像头;
如果大家直接插入到A9板子上,那么得看一下是否板子的内核支持,首先我们必须确定的是USB必须支持,紧接着查看设备节点目录下是否有该设备节点;
当插入摄像头的时候会显示以下信息:
并且大家也能够看到这里的ID号和Windows下的ID号是一致的!
紧接着查看设备节点:
哈哈哈,大家是不是还想看一下拔出是个啥情况,满足大家需求:
如果上述这些操作大家都正常,那么表示咱们的硬件环境已经搭建完成了,接下来需要做的就是进行软件实现视频流上传了;
大家一定要注意板子的内核一定得支持USB接口,要不然咱们插上摄像头是不会显示信息的,先配置内核,编译好内核后放在tftp目录下,板子启动后再插入;
二、 jpeg库的移植
又到了移植的环节了,本项目做到这里呢,已经是第三个移植了,从前两个移植中我们基本已经知道了移植其实就是将现成的接口标准库拿过来加入到自己的项目框架中,进行合理运用;
2.1 源码下载
源码的下载可以点击下面这个网站:http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page
2.2 jpeg库的移植
依旧是先下载,http://www.ijg.org/files/jpegsrc.v8b.tar.gz
紧接着解压缩,命令是
tar -xvf jpegsrc.v8b.tar.gz
接下来配置源码,需要注意的是这里的./configure后面需要紧接着传参:
cd jpeg-8b
./configure --prefix=自己指定一个目录 --host=arm-none-linux-gnueabi
注意:--prefix表示最终生成的库和头文件等存放的目录,自己指定一个存在的路径就可以,
后面编译mjpeg-streamer的时候回用到,此处必须使用绝对路径,--host=arm-none-linux-gnueabi --host表示生成的库的运行平台,
注意是两个 - ,末尾不能加- ,./configure 之后为一行命令
这里提到了绝对路径,一般再移植的过程中我们都使用绝对路径,这样保证不会出错;因为毕竟是移植,如果设置为相对路径,移植后的目录已经发生了变化,也就意味着相对路径的相对基准已经发生了变化;还记得boa服务器的移植吗,如果不是移植再根目录下,而是在某一个路径下,那么配置boa.conf文件的时候就必须设置为绝对路径了;这个就是设置为绝对路径的优势!
接下来进行编译,make就行;
最后拷贝库文件到跟文件系统中:
sudo cp /home/fengjunhui/securitymonitor/mjpeg streamer/video/jpegarm/lib/* /home/fengjunhui/source/rootfs/lib
三、mjpeg-stream的移植
首先下载源码;svn cohttps://mjpg-streamer.svn.sourceforge.NET/svnroot/mjpg-streamermjpg-streamer
下载源码后进行解压:
这几个目录文件的作用如下:
doc mjpg-streamer udp_client
mjpeg-client mjpg-streamer-experimental uvc-streamer
mjpg-streamer :目录下提供了 的执行程序和各个输入输出设备组件
uvc-streamer : 目录下提供了 uvc-streamer的可执行目录
mjpeg-client: : 分别有 linux和windows 的客户端
- 进入到mjpg-stream目录下
- 修改源码
vi ./plugins/input_uvc/Makefile
将CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
修改为
CFLAGS += -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/secure/mjpeg-streamer/video/jpegarm/include (这个命令大家根据自己的路径来敲)
将(CC)(CFLAGS) -o @inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS)
修改为
(CC)(CFLAGS) -L /home/fengjunhui/securitymonitor/mjpeg-streamer/video/jpegarm/lib –o @inputuvc.cv4l2uvc.lojpegutils.lodynctrl.lo(LFLAGS)
- 在mjpg-streamer-code-182/mjpg-streamer 目录下
编译:make CC=arm-linux-gcc
在mjpg-streamer生成了
input*.so output*.so 和 mjpg_streamr 可执行文件
小问题:
make CC=arm-linux-gcc
make: svnversion: Command not found
解决方案:sudo apt-get install subversion
安装之前先更新一下软件包的源和依赖:
Sudo apt-get update 更新软件源
Sudo apt-get -f install 更新依赖
再次编译:
make
Nothing to be done for `all'.
先
make clean,
然后再
make CC=arm-linux-gcc
查看生成的库和可执行的文件:
fengjunhui@ubuntu:~/securitymonitor/mjpeg-streamer/mjpg-streamer-code-182/mjpg-streamer$ ls *.so
input_file.so input_uvc.so output_http.so
input_testpicture.so output_file.so output_udp.so
ls mjpg_streamer
mjpg_streamer
- 移植到开发板
mkdir /home/fengjunhui/source/rootfs/mjpg-streamer (你的根文件系统目录)
cp *.so /home/fengjunhui/source/rootfs/mjpg-streamer -arf
cp mjpg_streamer /home/fengjunhui/source/rootfs/mjpg-streamer -arf
将源码目录中的start.sh和目录www拷贝到~/source/rootfs/mjpg-streamer/目录下,然后就可以测试啦
sudo cp start.sh www/ ~/source/rootfs/mjpg-streamer/ -arf
四、测试结果
先打开开发板把内核跑起来,内核必须支持USB,并且对摄像头也有一定的要求,这里需要给大家说仔细了,上面说到的设备号必须在http://www.ideasonboard.org/uvc/网站里面,但是经过我的实测发现,如果其他移植过程都没有问题,并且运行start.sh脚本也没有问题,或者有以下问题:
ERROR opening V4L interface: No such file or directory
Init v4L2 failed !! exit fatal
i: init_VideoIn failed
MJPG-streamer [1296]: init_VideoIn failed
那么大家都可以打开start.sh文件,在以下处进行更改:
紧接着在A9开发板运行BOA服务器,直接进入视频流文件夹下运行start.sh脚本,那么可以观测到以下现象:
以上两张图片就是在网页上显示的视频中午截图所得,视频还是比较模糊的,但是实测了一下离近一点会清晰一点,摄像头用的还是比较便宜哈!
总结
本期的分享就到这里结束了,本期的这些过程如果大家一步步做下来的话,大家会发现遇到的问题还是不少的,但是问题永远是存在的,有时候是硬件设备不匹配,有时候是软件不支持,所以选型就是一个非常重要过程;希望大家还是能够根据自己的项目找到合适的选型;最后,各位小伙伴们如果有收获,可以点赞收藏哦,你们的认可是我创作的动力,一起加油!