APP下载

基于Nginx技术的直播平台

2018-06-22连云港广电传媒集团

视听界(广播电视技术) 2018年3期
关键词:服务器模块用户

陆 亮 连云港广电传媒集团(台)

1.引言

在移动互联网快速发展的背景下,我国媒体融合发展已是大势所趋。今年两会,直播成为人民日报社新媒体中心的新亮点。人民日报社全媒体记者密切分工配合,在两会现场搭建自有的直播系统,实时提供高清直播信号,让受众直击两会现场。根据相关统计,人民日报新媒体中心共推出两会直播48场,总观看量超4360万,总直播时长超50小时。直播无疑已成为媒体获取观看流量的主要抓手。

直播流媒体服务架构如图1所示,主要由推流端、拉流端、媒体服务器所示,三者由推流协议、拉流播放协议依次连接。在推、拉流协议的应用场景中,RTMP可以用在双端,HLS只能用在拉流端。

推流端即主播端,主要通过手机、摄像机、摄像头采集视频数据,麦克风采集音频数据,经过一系列前端信号采集和处理、编码、封装,然后推流到直播流媒体平台,通过CDN网络分发,在拉流播放端的用户可以通过多屏观看及互动,直播流媒体服务组成如图2所示。

图1 直播流媒体服务架构

图2 直播流媒体服务组成

2.关键技术协议

直播流媒体业务有两种协议可供选择:HLS 和RMTP。HLS是苹果公司基于 HTTP 的流媒体传输协议,可支持流媒体的直播和点播,主要应用在iOS 系统,为 iOS 设备(如 iPhone、iPad)提供音视频直播和点播方案。RTMP是 Adobe Systems 公司为Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议,RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。

2.1 HLS ( HTTP Live Streaming基于 HTTP 的流媒体传输协议)

2.1.1 HLS工作原理

当采集推流端将视频流推送到流媒体服务器时,服务器将收到的流信息每缓存一段时间就封包成一个新的ts文件,同时在服务器建立一个m3u8的索引文件来维护最新几个 ts 片段的索引。当播放端获取直播时,从 m3u8 索引文件获取最新的 ts 视频文件片段播放,从而保证用户在任何时候连接时都会看到较新的内容,实现近似直播的体验。相对于常见的流媒体直播协议,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件,客户端不断地下载并播放这些小文件。这种方式的理论最小延时为一个 ts 文件的时长,一般情况为 2-3 个 ts 文件的时长。HLS的分段策略,基本上推荐是 10 秒一个分片,因此,通常 HLS 直播延时会达到 20-30s,而高延时对于需要实时互动体验的直播来说是不可接受的。HLS 基于短连接 HTTP,HTTP 是基于 TCP 的,这就意味着 HLS 需要不断地与服务器建立连接,TCP 每次建立连接时的三次握手、慢启动过程、断开连接时的四次挥手都会产生消耗。HLS的优点是,数据通过HTTP 协议传输,所以采用 HLS 时不用考虑防火墙或者代理的问题;使用短时长的分片文件来播放,客户端可以平滑地切换码率,以适应不同带宽条件下的播放。

图3 直播协议分类

图4 nginx环境搭建

2.2 RTMP(Real Time Messaging Protocol,实时消息传送协议)

RTMP是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有以下三种变种:

(1)工作在TCP之上的明文协议,使用端口1935;

(2)RTMPT封装在HTTP请求之中,可穿越防火墙;

(3)RTMPS类似RTMPT,但使用的是HTTPS连接;

RTMP协议被Flash用于对象、视频、音频的传输。这个协议建立在TCP协议或者轮询HTTP协议之上。RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视音频数据。一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。图3是直播协议的分类。

3.直播平台搭建

近几年,主流的开源直播软件解决方案有Simple-RTMP-Server和nginx-rtmp-module。本文主要介绍nginx-rtmp-module,它依赖于nginx,以第三方模块的形式提供直播功能,推流侧使用RTMP协议,播放侧使用HLS协议。

3.1 Nginx

图5 RTMP statistics页面

图6 OBS参数配置

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强。为了方便阐述,本文使用Windows环境下的nginx(事实上,linux环境下更能体现nginx的优越性能)。我们在nginx官网下载nginx-1.8.1.zip,解压在根目录下。打开cmd命令窗口,进入nginx所在目录,输入启动命令 start nginx ,在网页中输入localhost即可得nginx欢迎页,如图4所示,至此,nginx服务器搭建成功。

3.2 部署nginx-rtmp-module

通过官网github下载nginx-rtmp-module软件包,解压放置在nginx目录下,修改conf目录下的nginx.conf文件。这些配置参数很重要,是直播功能能否实现的关键。为此,我们给出了详细的参数配置。worker_processes 1;

events {

worker_connections 8192;

}

rtmp {

server{

listen 1935; #服务端口--默认

chunk_size 4096; #数据传输块

的大小--默认

application vod { #设置直播的application名称是 live

play /opt/video/vod;

}

application live{

live on; #live on表示开启直播模式

}

}

}

http {

include mime.types;

default_type application/octet-stream;

sendfile off;

图8 VLC拉流直播视频

图9 PC端直播页面

图10 移动端直播页面

server_names_hash_bucket_size 128;

server {

listen 80;

server_name localhost;

location /stat{

rtmp_stat all;

rtmp_stat_stylesheet stat.xsl;

}

location /stat.xsl{

root nginx-rtmp-module/;

}

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

nginx.conf文件参数配置完成后,重启nginx。访问http://localhost/stat页面,如果我们能得到图5所示界面则配置成功。

3.3 进行直播

直播推流的工具有很多,诸如编码器、推流软件等。本文使用OBS实现推流功能。打开OBS配置参数,如图6 所示。图7为OBS推流界面。

通过VLC软件拉流,如果可以看到直播视频,直播服务器的搭建配置成功,如图8所示。3.4 播放端优化

以上操作是从功能上完成直播拉流。目前,终端设备屏幕尺寸越来越多,不同设备的交互特质也有着巨大的差别,为了能够快速部署以及在各种设备上都有良好的用户体验,我们搭建基于ThinkPHP框架的网站,配置PC、移动两个模块。在ThinkPHP框架的入口文件index.php中添加is_mobile函数,用来实现PC端,移动端的自动切换,下文代码用以实现上述功能。

function is_mobile(){

$user_agent = $_SERVER['HTTP_USER_AGENT'];

$mobile_agents = Array("240x320","acer","phone","sy mbian","windows ce","zte");

//意在说明情况,移动系统不做枚举

$is_mobile = false;

foreach ($mobile_agents as $device) {

//这里把值遍历一遍,用于查找是否有上述字符串出现过

if (stristr($user_agent, $device)) {

//stristr 查找访客端信息是否在上述数组中,不存在即为PC端

$is_mobile = true;

break;

}

}

return $is_mobile;

}

//判断

if(is_mobile()){

// 移动端模块

define('BIND_MODULE','Mobile');

}else{

// PC端模块

define('BIND_MODULE','Home');

}}

当用户访问网站时,系统根据访问终端类型自动切换至相应的模块,模块调出匹配设备屏幕尺寸的网页。通过这样的机制,可以为用户提供良好的视听感受。

4. CDN分发

直播流畅效果受人数、地域、网络状况等因素影响,本地介绍的直播平台支持最大并发数也是有限的。为了应对直播在线人数突增等诸多不稳定因素,我们推荐使用CDN。

CDN即Content Delivery Network (内容分发网络),是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层。简单地说,CDN是一个经策略性部署的整体系统,通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。内容服务基于缓存服务器,它位于网络的边缘,距用户仅有“一跳”(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,为用户提供尽可能少的网络延迟服务。

5.结束语

网络直播作为基于“互联网+媒体”理念应运而生的新生事物,将互联网技术运用到内容开发中来,重新树立“内容为王”的传播理念。网络直播也使得媒体内容拥有更强的针对性、时效性、吸引力、影响力和感染力。

猜你喜欢

服务器模块用户
28通道收发处理模块设计
“选修3—3”模块的复习备考
通信控制服务器(CCS)维护终端的设计与实现
中国服务器市场份额出炉
关注用户
得形忘意的服务器标准
关注用户
计算机网络安全服务器入侵与防御
关注用户
如何获取一亿海外用户