SRS 支持 HLS/RTMP 两种成熟而且广泛应用的流媒体分发方式。
HLS 和 RTMP 两种分发方式,就可以支持所有的终端。RTMP 分发参考 基于 SRS 搭建 RTMP 直播流媒体服务器。
总之,SRS 支持 HLS 主要是作为输出的分发协议,直播以 RTMP+HLS 分发,满总各种应用场景;点播以 HLS 为主。
分发 | 平台 | 协议 | 公司 | 说明 |
---|---|---|---|---|
RTMP | Windows Flash | RTMP | Adobe | 主流的低延时分发方式,Adobe对RTMP是Flash原生支持方式,FMS(Adobe Media Server前身),就是Flash Media Server的简写,可见Flash播放RTMP是多么“原生”,就像浏览器打开http网页一样“原生”,经测试,Flash播放RTMP流可以10天以上不间断播放。 |
HLS | Apple/Android | HTTP | Apple/Google | 延时一个切片以上(一般10秒以上),Apple平台上HLS的效果比PC的RTMP还要好,而且Apple所有设备都支持,Android最初不支持HLS,后来也支持了,但测试发现支持得还不如Apple,不过观看是没有问题,稳定性稍差,所以有些公司专门做Android上的流媒体播放器。 |
HDS | - | HTTP | Adobe | Adobe自己的HLS,协议方面做得是复杂而且没有什么好处,国内没有什么应用,传说国外有,SRS2已经支持。 |
dash | - | HTTP | - | Dynamic Adaptive Streaming over HTTP (DASH),为了对业界存在的多种自适应流技术进行规范,MEPG推出MEPG-DASH标准。旨在为动态自适应流媒体技术创造一种同一的协议标准,nginx-rtmp已经支持。 |
基于滴滴云 DC2(IP:116.85.57.94)进行软件部署,使用 SRS 切片,使用 NGINX 分发 HLS。
第一步,获取 SRS。详细参考
[dc2-user@10-254-81-196 ~]$ git clone https://github.com/ossrs/srs
[dc2-user@10-254-81-196 ~]$ cd srs/trunk
第二步,编译 SRS。详细参考
[dc2-user@10-254-81-196 trunk]$ ./configure && make
第三步,编写 SRS 配置文件。详细参考
将以下内容保存为文件 conf/srs.conf
,服务器启动时指定该配置文件 ( SRS 的 conf 文件夹有该文件):
# conf/srs.conf
listen 888;
#默认端口为1935,由于滴滴云DC2安全组策略问题,选择已开放的端口888测试
max_connections 1000;
srs_log_file ./objs/srs.log;
vhost stream.didi.com {
hls {
enabled on;
#是否开启HLS
hls_path ./objs/nginx/html;
hls_m3u8_file [app]/[stream].m3u8;
hls_fragment 3;
#指定ts切片的最小长度(单位:秒)
hls_window 3;
#指定HLS大小,即m3u8中ts文件的时长之和
}
}
第四步,启动 SRS。
[root@10-254-81-196 trunk]# ./objs/srs -c conf/srs.conf
[2018-12-11 14:34:43.454][trace][16007][0] XCORE-SRS/2.0.258(ZhouGuowen)
[2018-12-11 14:34:43.454][trace][16007][0] config parse complete
[2018-12-11 14:34:43.454][trace][16007][0] write log to file ./objs/srs.log
[2018-12-11 14:34:43.454][trace][16007][0] you can: tailf ./objs/srs.log
[2018-12-11 14:34:43.454][trace][16007][0] @see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLog
第五步,获取、编译 NGINX。
[dc2-user@10-254-81-196 ~]$ wget http://nginx.org/download/nginx-1.12.2.tar.gz
[dc2-user@10-254-81-196 ~]$ tar -zxvf nginx-1.12.2.tar.gz
[dc2-user@10-254-81-196 ~]$ cd nginx-1.12.2 && ./configure && make && make install
第六步,编写配置文件、启动 NGINX。
[dc2-user@10-254-81-196 ~]$ vim nginx-1.12.2/conf/nginx.conf
user root;
worker_processes 1;
error_log logs/error.log error;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~* \.m3u8 {
root /home/dc2-user/srs/trunk/objs/nginx/html/;
add_header Access-Control-Allow-Origin *;
}
location ~* \.ts {
root /home/dc2-user/srs/trunk/objs/nginx/html;
add_header Access-Control-Allow-Origin *;
}
location ~* crossdomain.xml {
root /usr/local/nginx/html/;
}
}
}
[dc2-user@10-254-81-196 ~]$ ./nginx-1.12.2/objs/nginx -c ../conf/nginx.conf
第七步,启动推流编码器。
Linux 系统下可以使用 FFMPEG 进行推流;Windows/Ios 系统下可选择 OBS 进行推流。(本文我们使用 FFMPEG 进行推流演示)
[dc2-user@10-254-81-196 ~]$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
[dc2-user@10-254-81-196 ~]$ cd ffmpeg
[dc2-user@10-254-81-196 ffmpeg]$./configure && make
如果编译失败,请根据提示内容安装依赖环境或忽略。
[dc2-user@10-254-81-196 ffmpeg]$ ./ffmpeg -re -i ../test.mp4 -f flv -vcodec copy -acodec copy -y rtmp://116.85.57.94:888/live?vhost=stream.didi.com/teststream
第八步,观看 HLS 直播流。
HLS 播放地址为:http://116.85.57.94/live/teststream.m3u8