signed

QiShunwang

“诚信为本、客户至上”

远程视频监控:流媒体之FFmpeg+RTMP+Nginx+VLC

2021/1/28 14:55:14   来源:

一:概述

在本项目开篇中已经提及了远程视频监控的两种的方案,而在上一篇也已经介绍了MJPG-Streamer方案,

https://blog.csdn.net/qq_34968572/article/details/113031348

本文将继续介绍另一种方案也是现在被应用最广泛的方案:流媒体。

回忆一下开篇中对流媒体框架的介绍:两端加一服(推流端,拉流端和流媒体服务器),以及推流协议和拉流协议。

https://blog.csdn.net/qq_34968572/article/details/112993821

本次方案整体框架为:FFmpeg(推流端)+RTMP(协议)+Nginx(流媒体服务器)+VLC(拉流客户端)

FFmpeg工具安装在Hi3516上,Nginx流媒体服务器安装在Ubuntu上,VLC客户端安装在PC上。三者通过路由连接即可实现局域网内的推流拉流,要想实现外放访问需要自己去实现内网穿透功能,后续会讲到,静等。

值得说明的是FFmpeg只是一个工具可以用于测试,在实际项目中一般都是用户自己根据需求实现推流程序(可以通过分析FFmpeg的源码来实现自己的推流程序),和FFmpeg具有相同功能的工具还有live555。

二:FFmpeg移植

FFmpeg的移植需要依赖几个三方库:

      1.yasm移植(可选,yasm是汇编编译器,ffmpeg加入它是为了提高编译速度,可在x264配置时使用--disable-asm选择不使用)

      2.x264移植

      3.xvid移植(可选)

FFmpeg及其三方库的移植在之前的二维码项目中已经讲解过,这里不再赘述。

传送门:https://blog.csdn.net/qq_34968572/article/details/112978917

编译完后将生成文件全部拷贝到Hi3516上。yasm,x264和xvid编译后的lib文件同样需要拷贝到Hi3516上。

三:Nginx+Rtmp流媒体服务器搭建

本次实验Nginx安装于Ubuntu上,所以不需要交叉编译。

1、安装三方库文件:

sudo apt-get install build-essentia

sudo apt-get install libpcre3 libpcre3-dev

sudo apt-get install libssl-dev

sudo apt-get install zlib1g

sudo apt-get install zlib1g-dev

sudo apt-get install unzip

2、准备Nginx和Nginx-Rtmp文件并解压:

(sudo) wget http://nginx.org/download/nginx-1.12.2.tar.gz (版本自选)
(sudo) wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

本次开发用的nginx1.16.1版本如上图所示

3、编译安装:

生成配置文件

sudo ./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=..//nginx-rtmp-module-master

编译安装

sudo make

sudo make install

4、修改config文件

根据下面图片修改文件:

在http中添加/live、/hls内容:

在最后添加rtmp内容:

5、启动Nginx

进入/usr/local/nginx/sbin: sudo ./nginx -c conf/nginx.conf

至此Nginx+Rtmp环境就搭建完毕,在相同网段中打开Ubuntu的IP地址就可看到Nginx流媒体服务器内容:

四:安装VLC

PC下载“VLC media player”客户端

五:测试

1、保证Ubuntu服务器,PC,和Hi3516网络在同一网段。

2、打开VLC客户端等待收流:

按照上述内容填充,点击播放等待Hi3516上推流数据即可实现拉流播放。

3、执行指令进行推流

./ffmpeg -re -i demo1.mp4 -vcodec copy -acodec copy -f flv rtmp://192.168.1.103/live/stream

其中ffmpeg是前面移植好的可执行文件在bin目录中,MP4文件自行下载,其中192.168.1.103是我Ubuntu服务器的IP地址。

VLC画面:

六:总结

本文记录我在利用FFmpeg工具进行流媒体开发的所有经过,以上仅仅只是实现了推本地文件,想要实现远程实时监控,还需搭配摄像头。

我在查询海思3516SDK时发现推流程序都是自己编写搭配自家的MPP框架实现摄像头采集数据实时推流。

据我所知推流程序一般都是分析FFmpeg工具中的源码,进行裁剪调用适配自己的产品。关于FFmpeg的源码分析可以参考雷大大(雷霄骅)的博客,视音频界的大佬(天妒英才,其对技术的追求和探索精神值得我们学习)

https://blog.csdn.net/leixiaohua1020

对于在实际项目中自行实现推流程序搭配摄像头和喇叭进行实时音视频推流和远程访问的内容容我挖个坑,后面有空再继续探索。现在有RK的项目要搞,我到时也会新建一个RK的专栏对工作进行记录与你们分享。这边得搁置一段时间了,过段时间再来。

咋们RK专栏见!