推荐一款优秀的开源流媒体服务器系统:SRS(Simple RTMP Server)
最近视频流媒体直播的应用很火,各种手机端的直播、美女聊天室、财经直播等等。由于项目的需要,需要寻找一款合适的流媒体直播系统,如果从头开发,显然成本和周期都不能在可接受的范围内。幸运的是,我找到了SRS这款优秀的直播系统,该系统官方地址为:http://www.ossrs.net/srs.release/releases/首先不得不提的是:SRS是国人开发,国人开发的开源系统近几年越来越多,是非常令人惊喜的事情,并且有很多非常优秀的,非常令人开心。另外不得不提的是:SRS的文档非常齐全,特别是wiki里面的各种说明,基本可以满足基础的需要。简单搭建了demo后测试,目前没有发现问题,基本可以满足项目的需要,也非常感谢SRS项目组的贡献。我也非常希望贡献自己绵薄之力,希望后面有机会可以帮SRS贡献一些bug的修改、或者新功能的添加等。自己的能力和精力可能目前还没有办法做独立的开源项目,希望从SRS起,参与和维护,也算贡献自己的一分力气。SRS比我想的要强大的多,已经不像一款出于兴趣的开源产品,很多功能齐备的商业化产品所需要的功能几乎都一网打尽了,而且更可贵的是作者长期的坚持和对品质的追求!这里可以大概罗列一些我比较喜欢的功能:1)集群模式(包括了边缘模式、Forward模式等),并且友好的支持CDN和服务器的灵活架设2)推流、Ingest流、直接接入视频文件等方式,非常灵活。当然,如果再结合一些优秀的推流软件,比如OBS则几乎目前市场上主流的流媒体直播需求就都能满足了。3)同时支持RTMP、HLS模式,甚至最新版还支持FLV模式(这个我很喜欢,因为同时具备了rtmp的实时性,以及hls中属于http协议的适应各种网络环境的特性,并且支持播放的播放器更多一些)。4)架设简单,文档齐全、demo齐全。5)具备基本的权限验证,可以限制推流和播放的权限。另外,只做核心功能这种理念是比较让人高兴的,比如验证,只要有接口,留给web去实现就可以了,这种设计其实是很让我喜欢的设计。6)最最重要的:开放源码和作者的坚持,以及字里行间体现出来对SRS的执着和追求完美。
当然,这几天的接触下来,SRS也有他的一些可能的我的担忧:1)作者本身在一家流媒体提供的商业公司工作,不确定后期是否会因为和公司产品冲突、公司要求等原因,有停止、减缓、影响SRS更新的可能。2)产品的稳定度如何--- 一个优秀的产品,只具备所需功能是一方面,更重要的是产品的大并发、各种环境下的稳定性如何,这个因为我使用时间较短,还没有发言权。这也是最为担心的情况,好在我已经做好了熟悉、阅读代码的准备,希望有问题也能有办法去修改。3)开发文档相比使用和功能说明文档略微较少,对于代码结构、代码熟悉入手。当然,注释挺多的,如果有时间,我倒是想丰富下这方面的文档,学习流媒体服务器从学习SRS开始。 :)
接下来,就开始我愉快的SRS之旅吧
Simple Rtmp Server是一个国人编写的开源的RTMP/HLS流媒体服务器. 功能与nginx-rtmp-module类似, 可以实现rtmp/hls的分发.有关nginx-rtmp-module的可参照: http://blog.csdn.net/redstarofsleep/article/details/45092147
编译与安装过程十分的简单
view plain copy
print?
[*]./configure --prefix=/usr/local/srs --rtmp-hls
[*]
[*]make
[*]
[*]make install
标准的三条命令就可完成安装. --rtmp-hls表示开启rtmp和hls, 其它的编译参数可通过./configure -h查看.
安装完后,目录下有三个文件夹conf, etc, objs. 我们常用的是conf和objs两个目录下的内容, conf下是各类配置文件的例子, objs下是可执行文件.启动服务器是通过-c参数指定一个配置文件即可 view plain copy
print?
[*]./objs/srs -c conf/hls.conf
如果是hls的话,配置文件大概是这样的:
view plain copy
print?
[*]# the config for srs to delivery hls
[*]# @see https://github.com/winlinvip/sim ... iki/v1_CN_SampleHLS
[*]# @see full.conf for detail config.
[*]
[*]listen 1935;
[*]max_connections 1000;
[*]vhost __defaultVhost__ {
[*] hls {
[*] enabled on;
[*] hls_path /usr/local/nginx/html;
[*] hls_fragment 10;
[*] hls_window 60;
[*] }
[*]}
其中的hls_path是存放hls分片ts文件和m3u8的目录, 我上面的例子中把它指定到nginx下.这样就可以直接播放hls视频流了.
如果是ffmpeg推送,那是和nginx-rtmp-module是一样的:
view plain copy
print?
[*]ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac
[*] -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://server:1935/
[*]myapp/test1
总体来说这个SimpleRtmpServer在配置使用上没有什么难度,基本都是参照nginx-rtmp-module的.
simple-rtmp-server直播流搭建simple-rtmp-server(简称srs)的编译搭建步骤如下:本文srs的下载目录为/home/stream_servera) 下载srs代码,git clone https://github.com/winlinvip/simple-rtmp-server.gitb) 进入simple-rtmp-server目录 cd /home/stream_server/simple-rtmp-server/trunkc) ./configure --fulld) make 此时编译成功e) 启动srs,./objs/srs -c conf/demo.19350.conff) demo.19350.conf 配置如下:listen 19350;max_connections 1000;daemon on;srs_log_tank file;srs_log_file ./objs/srs.demo.19350.log;pid ./objs/srs.demo.19350.pid; vhost __defaultVhost__ { enabled on; gop_cache on; hls { enabled on; hls_path ./objs/nginx/html/forward; hls_fragment 5; hls_window 30; }} g) ffmpeg推送rtmp流 ./ffmpeg -re -i 1.flv -c:v libx264 -c:a copy -f flv rtmp://127.0.0.1:19350/live/stream1h)ffplay播放 ffplay -i rtmp://192.168.9.192:19350/live/stream1
页:
[1]