0.引言

阅读本文前,可以先阅读前面的文章,能够帮助你更好理解本篇文章。文章列表如下:

SRS流媒体服务器集群之Edge模式(3)

SRS流媒体服务器集群之Edge模式(2)

SRS流媒体服务器集群之Edge模式(1)

SRS流媒体服务器集群之Forward模式(2)

SRS流媒体服务器集群之Forward模式(1)

SRS流媒体服务器之HTTP-FLV框架分析(1)

SRS流媒体服务器之RTMP推流消息处理(1)

SRS流媒体服务器之RTMP协议分析(2)

SRS流媒体框架分析(1)

SRS流媒体之RTMP推流框架分析(2)

SRS流媒体之RTMP拉流框架分析(3)

SRS流媒体服务器之RTMP协议分析(1)

简述SRS流媒体服务器相关技术

流媒体推拉流实战之RTMP协议分析(BAT面试官推荐)

流媒体服务器架构与应用分析

手把手搭建流媒体服务器详细步骤

手把手搭建FFmpeg的Windows环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

关于HLS流媒体服务器的配置讲解,这篇文章手把手配置HLS流媒体服务器已经讲解得十分清楚,本篇文章主要是讲解说明一下,为后面的源码分析做准备。

1.HLS简述

HLS实际就是由HTTP协议(通信协议),TS文件,m3u8文件组成。即支持直播,也支持点播,HLS是苹果设计的标准流媒体协议,与RTMP在PC具有类似的效果,HLS和RTMP两种方式,基本就可以支持所有平台。

手机浏览器原生支持HLS(应用很广),并不支持RTMP、HTTP-FLV。如果每一片的时长为10s,那总共是60s,比如切片的顺序就是0-9、10-19、20-29、30-39、40-49,50-59等,依次按照顺序。如果超过60s,那0-9s的文件就要被删掉,删掉后就会变为这种类似的情况,那就是10-19、20-29、30-39、40-49,50-59、60-69。这样就可以把ts文件总时长限定在60s。这里讲的是直播场景。如果是点播场景,提前切好ts文件。对于点播来讲,设置hls_fragment有效,对于hls_window没有效。

2.HLS配置文件介绍及说明

在如下目录:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(1)

启动SRS流媒体服务器,输入如下命令:

./objs/srs -c conf/srs.conf

再开一个窗口,进入如下目录路径:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(2)

看看这个目录下的内容,输入如下命令:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(3)

先删除掉这个live目录。输入命令如下:

rm -rf live

这个live目录,是用来创建流。

启动推流命令:

ffmpeg -re -i source.200kbps.768x320.flv -vcodec copy -acodec copy -f flv -y rtmp://xxx.xxx.xxx.xxx/live/livestream

可以观察下,这个live,就又会重新生成。如下界面:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(4)

在这个live目录下看看,就会有很多ts文件和m3u8的文件。如下界面:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(5)

可以看看这个ts文件是逐渐递增的。

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(6)

看看这个m3u8文件,输入命令:

cat livestream.m3u8

如下界面:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(7)

随着时间推移,一直在增加。

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(8)

如果超过25s(我这里的设置时长是25s),超过25s,会把前面的ts文件删除,如下界面:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(9)

在如下目录:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(10)

输入如下命令:

vim conf/full.conf

可以给每个ts文件,配置时间戳。如下界面:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(11)

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(12)

修改配置文件,输入命令:

vim conf/srs.conf

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(13)

这样就能够,看到时间戳:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(14)

注意:切片都是从I帧开始,一个ts文件至少都是一个GOP。

3.HLS协议应用场景与技术选型

3.1 主要的应用场景:

(1)跨平台,如果要选择跨平台,同时支持PC、Android、IOS,那就是HLS。目前win操作系统的pc,主要是使用RTMP,当然也有一些库能够使用HLS,如jwplayer或一些支持hls的插件。

(2)IOS上稳定性好:IOS上最稳定的当然是HLS,稳定性不差于RTMP在PC-flash上的表现。

(3)无缝对接CDN:HLS的协议基础是http,这方面CDN的接入和分发会比RTMP更加完善,能够切换自如,当然RTMP也可以只是需要对接测试。

(4)HLS理解更容易的数据分发,前面讲过HLS是非常适合跨平台,SRS流媒体服务器主要是把HLS当做输出的分发协议,以RTMP HLS分发,满足各种场景。

(5)不管是ios,还是android的原生博凡器,都比较好地支持了HLS,所以移动端还是可以考虑HLS。

HLS是点播和直播都可以,直播就主要看实时性。

3.2 技术选型:

(1)接入流媒体服务器系统使用RTMP协议。

(2)内部直播,数据分发使用RTMP。

(3)win系统的PC端的直播,实时性要求较高,可以使用RTMP。如果实时性要求不高,可以使用RTMP或HLS。

(4)win系统的PC端的点播,使用HTTP-FLV或HLS。

(5)在APPLE系统上,一般都只使用HLS,在实时性要求较高的情况下,就得去解析RTMP,如使用外部库,这里推荐一个网址。如下:https://www.vitamio.org

(6)Android终端,支持RTMP也是不错的选择。

3.2 分发方式比较:

HLS和RTMP协议的选型,完全取决于应用场景。当有些更严格的要求时,比如实时性更高,那么就需要自己开发了。

(1)UDP协议,实时性要求很高,如互动直播,视频会议等,这种场景,TCP和HTTP可能就不是很合适,这就没有通用的方案,需要开发基于UDP协议的流媒体协议。

(2)P2P:就适合做音视频通话,但是如何提高穿透率,这个是关键。

(3)RTSP:基本是属于安防领域的,互联网产品上,应用较少。

(4)HTTP progressive:早期流媒体服务分发http文件时,普通的http文件分发,这种叫渐进式下载,就是说必须从头开始播放或下载,如果要从中间播放,那是不可能。

(5)HTTP stream:支持seek的http流,把一个大文件切几段后分发,目前在pc/flash上点播场景应用得多。

(6)HDS:adobe公司设计的HLS,目前应用不多。

(7)DASH:各家提出的HLS,应用不是很多。

关于协议选型,更详细的文档,可以参考如下链接:

https://github.com/ossrs/srs/wiki/v3_CN_RTMP.PK.HTTP

界面如下:

ipsec网络端口策略(SRS流媒体服务器之HLS配置)(15)

4.总结

本文主要讲解了HLS组成,配置文件,直播和点播在不同系统的终端的技术选型,尤其是技术选型,这个很重要,在对接应用场景和需求时,就会显得非常重要。希望能够帮助到大家。欢迎关注,转发,点赞,收藏,分享,评论区讨论。

后期关于项目的知识,会在微信公众号上更新,如果想要学习项目,可以关注微信公众号“记录世界 from antonio”

,