前言:本项目更改自韦东山老师的视频监控项目,如果想深入了解该项目,建议去看韦老师的视频。本人只是将其适配成正点原子的Linux板子,如有侵权,请务必告知。必删!谢谢!
PC端与手机端通过局域网在线播放视频监控画面,效果如下:
硬件连接示意图:
在手机或电脑有联网的前提下,随时随地远程监控。但由于imx6ull性能局限为了有较好的演示效果,建议在板子先运行摄影一段视频程序,再将视频推流到Nginx流媒体服务器,然后手机从服务器上拉流下来通过VLC播放。监控画面如下:
注意:本文所有方案需建立在有网络的前提下,即需要WIFI模块,本人使用正点原子旗下的SDIO WIFI模块(8189)本人也根据原子的教程配置好相关的驱动,并就本项目需要,编写了建立网络连接的脚本。默认使用本人的路由。操作者在操作时应改为自己路由或热点的WiFi名称与密码。更改方法请参考正点原子WiFi驱动移植教程。
视频监控方案选择
视频里介绍两种方案。
方案一:利用mjpg-streamer实现局域网内的视频监控。
设计思路 | 在连接摄像头的ARM板子上,实现一个服务器程序:它一边读取摄像头数据,一边等待客户端连接并发送数据。在手机或电脑上,编写客户端程序,它会从ARM板上获得数据并显示出来。前提:约定数据格式传输一帧帧的数据 |
– | – |
现成程序 | 利用mjpg-streamer软件,将它运行在ARM板上,在手机上使用浏览器直接观看视频 |
– | – |
方案的优缺点 | 优点:程序简单,所有源码一目了然,便于学习对ARM板的性能要求不高,主频200MHz的ARM芯片也能实现。缺点:只能实现局域网内的视频监控要实现互联网视频监控,需要另外实现内网穿透mjpg-streamer没有实现声音传输mjpg-streamer项目已经不再维护,仅仅建议用于学习。 |
以正点原子驱动视频教学里的内核(4.15),设备树等为基础,根文件系统可选用第三期视频用busybox制作好的。在Ubuntu上对mjpg-streamer进行交叉编译。即配置、编译、安装三部曲后再将相关的库文件放到单板的lib文件夹下。最后在单板上运行mjpg-streamer,在电脑或手机浏览器输入http://路由器给开发板分配的IP地址:8080/?action=stream
即可观看。也可选用buildboot制作的根文件系统(推荐使用这个)这个根文件系统比较完善,可降低执行命令出错的几率。先按照原子里的buildroot教程制作根文件系统,再根据韦老师的视频生成含有mjpg-streamer软件的根文件系统。
方案二:热门的流媒体方案,利用ffmpeg软件将摄像头拍到的画面推流到Nginx流媒体服务器。推流命令在附录。PC端通过花生壳类软件进行内网穿透(把开发板暴露在公网上)。最后通过VLC打开网络串流输入以下URL即可从Nginx流媒体服务器上获取到监控的画面。访问地址如下图:
URL:访问地址/test?app=live&stream=wei
注意 由于IMX6ULL性能太弱,在VLC播放器里看到的视频很卡,很滞后
由于mini板没有声卡,对于视频里有关使用ffmpeg录制音频的步骤本人并无操作过,如果您手上的板子是阿尔法板可以把音频也录进去看一下效果。
附:
在开发板上安装好ffmpeg后:
执行命令: ffmpeg -f v4l2 -framerate 10 -i /dev/video1 -q 10 my.mp4
它会把摄像头的数据录制为my.mp4
把my.mp4复制到PC机,播放
推流
在开发板上执行:
ffmpeg -f v4l2 -framerate 10 -i /dev/video1 -q 10 -f flv rtmp://127.0.0.1/live/wei
拉流
192.168.1.6为PPT里的开发板IP,操作时应换成自己的开发板IP
在PC上安装VLC播放器:https://www.videolan.org/
使用RTMP协议拉流:VLC播放器中点击“媒体”->“打开网络串流”,输入:rtmp://192.168.1.6/live/wei ,就可以播放了
使用HTTPFLV协议拉流:VLC播放器中点击“媒体”->“打开网络串流”,输入: http://192.168.1.6/test?app=live&stream=wei ,就可以播放了
缺点:
IMX6ULL性能太弱,在VLC播放器里看到的视频很卡,很滞后
改进:
我们可以上传一个mp4文件到开发板,把它推到Nginx: ffmpeg -re -i test.mp4 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/wei
然后再用VLC拉流看看,会发现很顺畅