流媒体服务器的搭建


本项目拟通过在服务器主机上搭建一个流媒体服务器,将海康威视网络摄像头的rtsp视频流还原成实时画面,从而实现的校园观光车的实景的查看。

工作流程如下:

图1 流媒体服务器工作流程

最终将转换后的数据流推送到nginx服务器上,便可以通过浏览器进行实时画面的查看。

一、用到的材料:

1. 海康威视红外半球网络摄像机:

型号DS-2CD3132FD-IWS;

后台管理系统登陆网址:172.33.22.180

用户名:admin

密码:a1234567

Rtsp数据流:rtsp://admin:[email protected]:554/h264/ch2

/sub/av_stream

2.校园网服务器:

网址:172.16.97.29

用户名:car

密码:car.62461295

二、具体实施步骤

1. 设置网络摄像头WiFi

通过官网下载的设备网络搜索工具,可以查看到摄像头的IP地址,通过IP地址登陆后台管理界面,在网络设置中,将网络设置为CQUPT,则摄像机就可以自动连接CQUPT的网络。便可以通过CQUPT传输数据流。

2. 在校园网服务器主机中搭建NFS服务器

在主机中搭建好NFS服务器,摄像头可以通过CQUPT将视频数据存放到NFS中共享的网络磁盘中。在磁盘中存放的数据格式为MP4格式,即为保存的监控视频。

并且在网络摄像头中的录像计划进行了编辑,将录像计划设置为定时录像,每天的八点到晚上十点只要录像机是开机状态便会进行录像,并且保存在校园网服务器中的网络磁盘,当存储空间不够时,会对前面的录像进行覆盖,实行轮流刻录。

 

 

3. nginx流媒体服务器搭建

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

用Nginx流媒体服务器,接收来自ffmpeg转换出的视频流,并且将视频流进行直播,使别的用户可以在浏览器中看到摄像头的实时画面。

步骤如下:

(1),下载nginx

(2),下载nginx-rtmp-module

(3),进入到nginx-1.10.1文件夹目录下,执行如下命令:

./configure--prefix=/usr/local/nginx --add-module=/home/user/nginx-rtmp-module  --with-http_ssl_module 

(4),执行:make,make install 完成安装

(5)修改配置文件nginx.conf,加入代码实现rtmp的支持

rtmp {   

        server {   

            listen1935;   

       

            applicationmyapp {   

                liveon;   

            }   

            applicationhls {   

                liveon;   

                hlson;   

                hls_path/tmp/hls;   

            }   

        }   

    }    

(6)保存配置文件,并且启动nginx服务

4. 安装ffmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

步骤如下:

(1),首先在官网下载安装包,解压

(2),进入到目录中,进行安装,执行以下代码:

./configure --enable-shared --prefix=/usr/local/ffmpeg

(3)执行make ,make install 完成安装

(4)安装完成后,不管是编程还是可执行程序的执行都需要依赖lib下面的动态库,可以把里面的so文件拷贝到/usr/lib下,但可以直接修改配置文件,是可以在/etc/ld.so.conf.d/创建一个新的文件ffmpeg.conf,/usr/local/ffmpeg/lib,即为ffmpeg的lib目录。再执行ldconfig,更新ld.so.cache,使修改生效。

(5)为了方便使用,将ffmpeg配置到环境变量中,修改profile文件。 Vi /etc/profile 加入:

FFMPEG=/usr/local/ffmpeg

    PATH=$PATH:$FFMPEG/bin

至此,ffmpeg命令便可以在任意目录下使用了,ffmpeg安装完毕。

 

三、测试

在服务器上安装完nginx,以及ffmpeg之后便可以进行测试了。首先在执行:ffmpeg -i rtsp://admin:[email protected] -vcodec copy -acodecaac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 -f flvrtmp://172.16.97.29:1935/hls/test ,作用就是将rtsp数据流转换成hls协议,并且将数据流推送给nginx服务器。

接着在手机浏览器中输入网址:172.16.97.29/hls/test.m3u8便可以看到摄像头的实时监测画面了,发现延时较大。

四、优化

   通过测试发现视频的延时较大,通过查看资料,进行优化。1、首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方。HTTP LiveStreaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的时间延时。在客户端,至少在一个分段媒体文件被完全下载后才能够开始播放,而通常要求下载完两个媒体文件之后才开始播放以保证不同分段音视频之间的无缝连接。此外,在客户端开始下载之前,必须等待服务器端的编码器和流分割器至少生成一个TS文件,这也会带来潜在的时延。服务器软件将接收到的流每缓存一定时间后包装为一个新的TS文件,然后更新m3u8文件。m3u8文件中只保留最新的几个片段的索引,以保证观众任何时候连接进来都会看到较新的内容,实现近似直播的效果。这种方式的理论最小延时为一个ts文件的时长,一般为2-3个ts文件的时长。

所以,hls的延时主要由以下三个部分组成:

(1)服务器端的编码器和流分割器生成TS文件的时间

(2)客户端下载TS文件的时间,而通常要求下载完两个TS媒体文件

(3)客户端解码并播放时间

这三个方面里面,前两个方面我们是可以控制调节的,对于第三个方面只能取决于客户端的性能。

2、具体优化方法

由于服务器端生成TS流段需要时间,那么我们可以调节每段TS文件的大小,让其小些,那么服务器生成它的速度就加快,时间缩短。

这样一来,客户端下载第一段或者前两段的时间就会减少,延时就会降低。

根据上述的方式可以更改HLS的分段大小,方法是修改nginx配置文件nginx.conf。这样设置完之后的配置文件HLS配置部分为:

application hls {   

                liveon;   

                hlson;   

                hls_path /data/misc/hls; 

               hls_fragment 1s;  

       hls_playlist_length 3s; 

            }   

    再次进行测试发现,视频的延时有所下降。


如果本文对您有帮助,感谢您的支持!

流媒体服务器的搭建_第1张图片


你可能感兴趣的:(直播)