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配置文件介绍及说明
在如下目录:
启动SRS流媒体服务器,输入如下命令:
./objs/srs -c conf/srs.conf
再开一个窗口,进入如下目录路径:
看看这个目录下的内容,输入如下命令:
先删除掉这个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,就又会重新生成。如下界面:
在这个live目录下看看,就会有很多ts文件和m3u8的文件。如下界面:
可以看看这个ts文件是逐渐递增的。
看看这个m3u8文件,输入命令:
cat livestream.m3u8
如下界面:
随着时间推移,一直在增加。
如果超过25s(我这里的设置时长是25s),超过25s,会把前面的ts文件删除,如下界面:
在如下目录:
输入如下命令:
vim conf/full.conf
可以给每个ts文件,配置时间戳。如下界面:
修改配置文件,输入命令:
vim conf/srs.conf
这样就能够,看到时间戳:
注意:切片都是从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
界面如下:
4.总结
本文主要讲解了HLS组成,配置文件,直播和点播在不同系统的终端的技术选型,尤其是技术选型,这个很重要,在对接应用场景和需求时,就会显得非常重要。希望能够帮助到大家。欢迎关注,转发,点赞,收藏,分享,评论区讨论。
后期关于项目的知识,会在微信公众号上更新,如果想要学习项目,可以关注微信公众号“记录世界 from antonio”
,