srs之使用10倍代码的HLS

本文转载
移动端发展速度已经不用科普了,移动端的流媒体用什么分发?SRS(Simple Rtmp Sever)为何要重写HLS和HTTP?为什么说SRS(Simple Rtmp Server)才是标准移动端的流媒体服务器? 移动端是个可以好好装逼的领域,对于移动端流媒体更加是可以一装再装逼。这篇逼只是一个开头,这篇专门讲讲移动端会有哪些球会推出来。 接下来可能会陆续的装如下的逼: M3U8/TS到底有什么难的?坑有多大,坑里有多少个球? 除HLS外,HTTP-FLV/MP3也是移动端需要的吗? 为何要为移动端重写HTTP服务器?这个球有多大? 移动端直播和点播P2P的实现。 先了解个大概吧。SRS1.0(Simple Rtmp Server1.0)时是以RTMP为主的,RTMP规范SRS(Simple Rtmp Server)已经很熟悉了,多少个球已经胸有成竹;为了支持IOS,就必须要HLS,粗略的看了一遍TS规范,就把NGINX-RTMP中的代码拷贝过来了;后来发现NGINX-RTMP也是参考FFMPEG为主,而FFMPEG向来是不太参考规范的,所以两次参考之后很多东西就不知道为何要这么弄了。 NGINX-RTMP中只有400行处理ts,实际上那个ts的规范就200多页。400行确实很精简,很多只好用常量代替。所以在纯音频时,输出的HLS里面还是包含了video那个pid;而h.264+mp3根本就没法支持了。SRS2(Simple Rtmp Server2)重写后ts部分花了3000行代码,完整的支持了ts标准。 除了TS部分,m3u8其实也是有rfc的;有个地方还不太明白,SRS(Simple Rtmp Server)专门向apple的m3u8标准的维护者发邮件请教,apple回复后澄清了问题。SRS2(Simple Rtmp Server2)的hls配置项也增加了不少。 标准就像交通规则,知道而愿意遵守的都会被大牛讥讽,牛逼的程序员从来不屑遵守规范;而事故也大多源自于不规范。SRS(Simple Rtmp Sever)不仅遵守m3u8/ts规范,而且还注明是出自于哪个规范,在哪一页。代码注释就多达23%。 对于HTTP-MP3流呢,有些安卓没法播放纯音频的HLS,但是能播放HTTP-MP3。实际上SRS2(Simple Rtmp Server2)的HTTP服务器重写后,支持的不仅仅是HTTP-MP3,还有FLV、AAC、TS。 为何要重写HTTP服务器?为何不呢?HTTP流和RTMP流,或者HLS流;实际上在SRS(Simple Rtmp Server)里面分发时,才能做到非常方便的管理和处理,譬如HSTRS,HTTP流的边缘服务器。SRS1(Simple Rtmp Server1)的HTTP服务器还是实验性的,SRS2(Simple Rtmp Server2)已经参考golang的HTTP模块重写了,达到了商用标准。 HLS的延迟呢,确实比RTMP的1-3秒高,这个可以调整到6-10秒级别。在一般的移动端应用还是可以接受的。更低的HLS延迟方案,SRS(Simple Rtmp Sever)的商业化团队正在研究中。至于HLS的P2P,所有的P2P系统都不适合开源,太庞大了;不过HLS的P2P是可行的。 RTMP流是PC时代的流协议,实际上RTMP是真正的流协议,因此在PC+移动端时代,RTMP依然可以在接入和服务器内部分发有极大的作用。而HLS的复杂度和难度,绝对是在RTMP之上,因此完善的支持HLS才是移动端流媒体服务器的重中之重。 CRTMPD是监控时代的产物,NGINX-RTMP是PC时代,SRS(Simple Rtmp Sever)才是适应快速变化的产品,目前是移动端,未来可以有很多可能。这就是SRS(Simple Rtmp Sever),一个把RTMP和HLS吃得很透的服务器,一个在HLS上花了10倍于NGINX-RTMP代码和精力的球。
NGINX-RTMP中处理ts的代码,400行: https://github.com/arut/nginx-rtmp-module/blob/master/hls/ngx_rtmp_mpegts.c NGINX-RTMP中处理hls的代码,1450行: https://github.com/arut/nginx-rtmp-module/blob/master/hls/ngx_rtmp_hls_module.c SRS(Simple Rtmp Server)中处理ts的代码,3100行: https://github.com/winlinvip/simple-rtmp-server/blob/develop/trunk/src/kernel/srs_kernel_ts.cpp SRS(Simple Rtmp Server)中处理hls的代码,1077行: https://github.com/winlinvip/simple-rtmp-server/blob/develop/trunk/src/app/srs_app_hls.cpp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值