嵌入式arm linux平台获取网络摄像头RTSP视频流的开发

说明:

最近要做一物联网项目的需求,通过物联网数据采集网关根据需要联动触发局域网内网络摄像头(例如海康,雄迈,天视通等各种品牌的摄像头)的视频上传到中国移动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

configure命令

执行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平台上播放指定摄像头的视频.

网页界面展示
html,js代码
CGI源码程序


源码下载

包括文中的FFMPEG源码及HTML,CGI源码;

链接:ffmpeg源码及web源码

链接:https://pan.baidu.com/s/1AgsH2IBTLHuP6xx4CJNbmQ

提取码:ycpx

或扫码下载:


你可能感兴趣的:(嵌入式arm linux平台获取网络摄像头RTSP视频流的开发)