Nginx 服务视频网站介绍和搭建

2018-05-09 0 By admin

视频数据以数据流的方式推送到客户端。
服务器端需要配置服务,将数据流推送到客户端。这就是推流的过程。
客户端从服务端拉取数据流就是拉流的过程。客户端的拉流软件可以是播放器也可以使用JS扩展。

一、直播、点播和推流

直播:即直接观看主播实时推送过来的音视频数据,观众和视频源之间的时间延迟一般不会太长。
点播:视频源已经事先存储于腾讯服务器之上的音视频文件,观众随时可以观看,类似优酷土豆、爱奇艺和腾讯视频。
推流:主播将本地视频源和音频源推送到腾讯视频云服务器,在有些场景中也被称为“RTMP发布”。

二、数据流协议

流媒体实现的关键技术是流式传输,因此,流媒体传输协议无疑成为流媒体技术的重中之重,流媒体协议的设计和制定是为了实现流媒体服务器和客户端的通讯。

2.1、实时传输协议:RTP

实时传输协议(Real-time Transport Protocol)是针对在互联网上进行媒体数据流传输而提出的,它的目的是提供时间信息和实现流同步。RTP是最典型、最广泛的服务于流媒体的传输层协议。RTP可以在一对一或一对多的传输情况下工作。RTP可以在UDP、TCP或ATM等其他协议之上工作。

2.2、实时传输控制协议:RTCP

实时传输控制协议(Real-time Transport Control Protocal)和RTP一起提供流量控制和拥塞控制服务。

2.3、实时流媒体协议:RTSP

实时流协议(Real Time Streaming Protocal)是由Realnetworks和Netscape共同提出的,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。

2.4、资源预定协议:RTVP

资源预定协议(ReSource reserVe Protocol)是互联网上的资源预定协议,使用RSVP预留一部分网络资源(即带宽),能在一定程度上为流媒体的传输提供QoS,它使Internet应用传输数据流时能够获得特殊服务质量。

2.5、实时消息传输协议:RTMP

RTMP(Real Time Messaging Protocol)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种:
(1)工作在TCP之上的明文协议,使用端口1935;
(2)RTMPT封装在HTTP请求之中,可穿越防火墙;
(3)RTMPS类似RTMPT,但使用的是HTTPS连接。
RTMP视频播放的特点:
(1)RTMP协议是采用实时的流式传输,所以不会缓存文件到客户端,这种特性说明用户想下载RTMP协议下的视频是比较难的;
(2)视频流可以随便拖动,既可以从任意时间点向服务器发送请求进行播放,并不需要视频有关键帧。相比而言,HTTP协议下视频需要有关键帧才可以随意拖动。
(3)RTMP协议支持点播/回放(通俗点将就是支持把flv,f4v,mp4文件放在RTMP服务器,客户端可以直接播放),直播(边录制视频边播放)。

2.6、微软媒体服务器协议:MMS

MMS (Microsoft Media Server Protocol)用来访问并流式接收 Windows Media 服务器中 .asf 文件的一种协议。MMS 协议用于访问 Windows Media 发布点上的单播内容。MMS 是连接 Windows Media 单播服务的默认方法。

2.7、HLS

HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。

三、Nginx 配置RTMP模块(视频流服务)

维护链接:https://github.com/arut/nginx-rtmp-module

3.1、特征

1、RTMP / HLS / MPEG-DASH直播
2、RTMP视频点播FLV/MP4,从本地文件系统或HTTP播放
3、流中继支持分布式流式传输:推&拉模式
4、在多个FLV中录制流
5、H264 / AAC支持
6、使用FFmpeg在线转码
7、HTTP回调(发布/播放/记录/更新等)
8、在某些事件上运行外部程序(exec)
9、Http control module(控制模块)用于记录(recording)音频/视频和dropping clients
10、先进的缓冲技术将内存分配保持在最低水平,以实现更快的流传输和低内存占用

3.2、Nginx编译参数

--prefix=/usr/local/flow --with-pcre --with-zlib= --with-openssl= --with-http_ssl_module --add-module=../nginx-rtmp-module-master --with-http_flv_module --with-http_mp4_module

3.3、Nginx-Rtmp配置

配置文件参考nginx-rtmp-module源码文件中的帮助文档。
注意点:
1、注意rtmp模块点播支持的视频格式。
2、直播服务自然需要配置推送服务才能使用。
3、推流服务可以使用ffmpeg软件工具实现。
我的需求是搭建一个视频播放服务,所以也就不需要设置直播或推流的功能。不过因为rtmp模块支持的视频格式有限,需要使用视频转换工具。