最近一直在弄流媒体服务器,故分享一下现在火热的直播服务器SRS(Simple RTMP Server)
1.SRS(simple-rtmp-server)介绍
SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。
运营级:商业运营追求极高的稳定性,良好的系统对接,以及错误排查和处理机制。譬如日志文件格式,reload,系统HTTP接口,提供init.d脚本,转发,转码,边缘回多源站,都是根据CDN运营经验作为判断这些功能作为核心的依据。
互联网:互联网最大的特征是变化,唯一不变的就是不断变化的客户要求,唯一不变的是基础结构的概念完整性和简洁性。互联网还意味着参与性,听取用户的需求和变更,持续改进和维护。
直播服务器:直播和点播这两种截然不同的业务类型,导致架构和目标完全不一致,从运营的设备组,应对的挑战都完全不同。两种都支持只能说明没有重心,或者低估了代价。
集群:FMS(AMS)的集群还是很不错的,虽然在运营容错很差。SRS支持完善的直播集群,Vhost分为源站和边缘,容错支持多源站切换、测速、可追溯日志等。
概念完整性:虽然代码甚至结构都在变化,但是结构的概念完整性是一直追求的目标。从SRS服务器,P2P,ARM监控产业,MIPS路由器,服务器监控管理,ARM智能手机,SRS的规模不再是一个服务器而已。
简单实现:对于过于复杂的实现,宁可不加入这个功能,也不牺牲前面提到的要求。对于已经实现的功能的代码,总会在一个版本release前给予充分的时间来找出最简答案。不求最高性能,最优雅,最牛逼,但求最简单易懂。
备注:概念完整性可以参考Brooks的相关文献,在宏观方面他还是很有造诣
SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码、流截图、转发给其他服务器、转封装成HTTP-FLV流、转封装成HLS、转封装成HDS、录制成FLV。SRS包含支大规模集群如CDN业务的关键特性,譬如RTMP多级集群、VHOST虚拟服务器、无中断服务Reload、HTTP-FLV集群、Kafka对接。此外,SRS还提供丰富的应用接口,包括HTTP回调、安全策略Security、HTTP API接口、RTMP测速。
2.推荐使用方法
step 1: 编译 srs
代码语言:javascript复制tar xf simple-rtmp-server-*.*.tar.gz
cd simple-rtmp-server-*.*/trunk
./configure --with-ssl --with-hls
make
step 2: 启动srs
代码语言:javascript复制./objs/simple_rtmp_server -c conf/srs.conf
step 3(可选项): 启动nginx
代码语言:javascript复制sudo ./objs/nginx/sbin/nginx
step 4: 发布流媒体
代码语言:javascript复制FMS URL: rtmp://127.0.0.1:1935/live
Stream: livestream
For example, use ffmpeg to publish:
ffmpeg -re -i source.flv -vcodec copy -acodec copy
-f flv -y rtmp://127.0.0.1:1935/live/livestream
step 5: 播放流媒体
代码语言:javascript复制rtmp url: rtmp://127.0.0.1:1935/live/livestream
m3u8 url: http://127.0.0.1:80/live/livestream.m3u8
和Nginx方案对比:
优点:Nginx可以做直播,也可以做点播,SRS只能做直播。
缺点:Nginx总体延迟大约在5s左右,SRS延迟大约在1s左右。