说明:
最近要做一物联网项目的需求,通过物联网数据采集网关根据需要联动触发局域网内网络摄像头(例如海康,雄迈,天视通等各种品牌的摄像头)的视频上传到中国移动ONENET云服务器平台,硬件平台是嵌入式ARM LINUX平台的,通过了解,这些摄像头的厂家基本都没有提供嵌入式ARM平台的SDK供开发者开发,例如海康的摄像头,提供的SDK只有PC版本的,所以通过厂家SDK开发是行不通的;但发现,网络摄像头基本上都是有RTSP视频流功能的, RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议.所以可以通过在嵌入式ARM LINUX平台上访问摄像头的RTSP视频流的方法实现相应的需求.
要实现ARM LINUX平台上访问网络摄像头,就需要在ARM LINUX上实现RTSP客户端功能,偿试两种方案,一是应用openrtsp实现,但发现编码效果不是很好,然后改用了ffmpeg方案,稳定性及效率都满足需求.可以实时读取RTSP视频流数据并播放或转码成自己想要的视频格式.测试了各种品牌(泰科、天地伟业、深圳帝之特、海康威视Hikvision、亚安Yaan)的摄像头兼容性很好.
硬件环境
硬件平台: FETMX6UL-C
软件平台:linux
编译器:arm-linux-gcc
摄像头:海康摄像头(也可以其他品牌的网络摄像头,只要支持RTSP协议即可)
FFMPEG移植
下载ffmpeg-4.2.2.tar.bz2源码包
可以从官网下载源码包,也可以在文档结尾的链接下载.
执行configure配置如下,生成 makefile
./configure --prefix=/opt/trash/ffmpeg2 --disable-static --enable-shared --disable-x86asm --enable-gpl --enable-nonfree --enable-cross-compile --arch=arm --target-os=linux --cross-prefix=arm-linux- --cc=arm-linux-gcc --enable-pthreads --enable-ffplay --enable-decoder=h264
执行make编译
执行make install安装
耐心等待编译成功后会编译出如下ffmpeg命令及相关的动态库.接着来就可以用ffmpeg命令及引用相应的动态库编程实现了.ffmpeg是很强大的音频视频处理工具命令. 动态库文件较大,也可以根据需求配置去掉部分功能重新编译减少库文件大小.
命令应用
ffmpeg命令用法:
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
-i 设定输入流
-f 设定输出格式
-ss 开始时间
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
用ffmpeg工具命令将rtsp视频流生成MP4视频文件执行如下图的命令可以生成5秒的MP4视频文件,说明ffmpeg移植成功;
DEMO程序WEB网页设计
WEB网页设计了一个DEMO程序根据输入的RTSP视频流地址请求获取视频播放演示,设计应用了HTML与JS,CGI技术来设计;在浏览里输入开发板的IP地址/camera.html即可以打开demo网页,输入rtspurl,点击获取视频即可以在arm linux平台上播放指定摄像头的视频.
源码下载
包括文中的FFMPEG源码及HTML,CGI源码;
链接:ffmpeg源码及web源码
链接:https://pan.baidu.com/s/1AgsH2IBTLHuP6xx4CJNbmQ
提取码:ycpx
或扫码下载: