Skip to content
winlin edited this page Oct 20, 2015 · 6 revisions

编译SRS

本文说明了如何编译和打包SRS,另外,可以直接下载release的binary,提供了几个常见系统的安装包,安装程序会安装系统服务,直接以系统服务启动即可。参考:Github: release或者国内镜像: release

操作系统

  • README中的Usage,在Centos6.x/Ubuntu12下面测试成功。按照Step操作后,浏览器中打开服务器地址就能观看所有的DEMO。
  • DEMO演示了所有SRS的功能,特别是ffmpeg依赖的库巨多,因此为了简化,推荐使用Centos6.x/Ubuntu12.
  • 若的确需要在其他系统下编译SRS,下面说明SRS依赖的各种库,可以关掉某些功能减少编译的依赖。

关闭防火墙和selinux

有时候启动没有问题,但是就是看不了,原因是防火墙和selinux开着。

可以用下面的方法关掉防火墙:

# disable the firewall
sudo /etc/init.d/iptables stop
sudo /sbin/chkconfig iptables off

selinux也需要disable,运行命令getenforce,若不是Disabled,执行下面的步骤:

  1. 编辑配置文件:sudo vi /etc/sysconfig/selinux
  2. 把SELINUX的值改为disabled:SELINUX=disabled
  3. 重启系统:sudo init 6

编译和启动

确定用什么编译选项后(参考下面的说明),编译SRS其实很简单。只需要RTMP和HLS:

./configure && make

指定配置文件,即可启动SRS:

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

推RTMP流和观看,参考Usage: RTMP

更多使用方法,参考Usage

编译选项和预设集

SRS提供了详细的编译选项来控制功能的开关,以及提供了一些有用的预设,针对不同的应用场景默认选项。

SRS会先应用预设集,然后应用用户的选项,譬如:./configure --rtmp-hls --with-http-api,应用顺序为:

  • 首先应用预设集:--rtmp-hls,开启ssl/hls,其他功能都处于关闭状态。
  • 应用用户选项:--with-http-api,开启http api接口。

所以这个编译命令最后支持的功能是:RTMP+HLS+HTTP接口

支持的预设集参考末尾的参数列表,或者执行:./configure -h查看。

jobs:加速编译

由于SRS在configure时需要编译ffmpeg/nginx,这个过程会很漫长,如果你有多核机器,那么可以使用jobs来并行编译。

  • configure: 在编译srs依赖的工具时可以并行编译。
  • make: 在编译srs时可以使用并行编译。

srs并行编译和串行编译的项目包括(srs会自动判断,不需要用户指定):

  • srs: 支持并行编译。
  • st-1.9: 串行编译,库比较小,编译时间很短。
  • http-parser: 串行编译,库比较小,编译时间很短。
  • openssl: 串行编译,并行编译有问题。
  • nginx: 支持并行编译。
  • ffmpeg: 支持并行编译。
  • lame: 支持并行编译。ffmpeg用到的mp3库。
  • libaacplus: 串行编译,并行编译有问题。ffmpeg用到的aac库。
  • x264: 支持并行编译。ffmpeg用到的x264库。

configure使用并行编译的方法如下:

./configure --jobs=16

注意:configure不支持make那样的"-jN",只支持"--jobs[=N]"。

make使用并行编译的方法如下:

// or make --jobs=16
make -j16

Package

SRS提供了打包脚本,可以将srs打包(不包含nginx/ffmpeg等外部程序)。安装包也提供下载,参考本文开头部分。

打包脚本会编译srs,然后将srs的文件打包为zip(zip比tar通用)。详细参考package的帮助:

[winlin@dev6 srs]$ ./scripts/package.sh --help

  --help                   print this message

  --x86-x64                configure with x86-x64 and make srs. 
  --arm                    configure with arm and make srs.

SRS依赖关系

SRS依赖于g++/gcc/make,st-1.9,http-parser2.1,ffmpeg,cherrypy,nginx,openssl-devel,python2。

除了g++/gcc/make基础工具,st-1.9是必选,其他都可以通过编译选项禁用。

自定义编译参数

SRS可以自定义编译器,譬如arm编译时使用arm-linux-g++而非g++。参考ARM:手动编译

注意:SRS和ST都可以通过编译前设置变量编译,但是ssl需要手动修改Makefile。还好ssl不用每次都编译。

编译的生成项目

configure和make将会生成一些项目,都在objs目录,其他会自动软链到objs目录。

  • ./objs/srs 启动SRS服务器
  • ./objs/research/librtmp/srs_bandwidth_check linux测速工具
  • ./objs/research/librtmp/srs_ingest_flv 将FLV文件采集为RTMP流工具
  • ./objs/research/librtmp/srs_ingest_rtmp 将RTMP流采集为RTMP流工具
  • ./objs/nginx/sbin/nginx 分发HLS用到的nginx服务器
  • research/api-server/server.py 启动HTTP hooks和DEMO视频会议用到的api-server
  • ./objs/ffmpeg/bin/ffmpeg SRS转码用的FFMPEG,DEMO推流也是用它
  • ./objs/lib/srs_librtmp.a SRS提供的客户端库,参考srs-librtmp
  • ./objs/nginx/html/players SRS的DEMO的静态页面,当没有开启HttpCallback时

配置参数说明

SRS的配置(configure)参数说明如下:

  • --help 配置的帮助信息
  • --with-ssl 添加ssl支持,ssl用来支持复杂握手。参考:RTMP Handshake
  • --with-hls 支持HLS输出,将RTMP流切片成ts,可用于支持移动端HLS(IOS/Android),不过PC端jwplayer也支持HLS。参考:HLS
  • --with-hds 支持HDS输出,OSMF可以播放HDS流。参考:HDS
  • --with-dvr 支持将RTMP流录制成FLV。参考:DVR
  • --with-nginx 编译nginx,使用nginx作为web服务器分发HLS文件,以及demo的静态页等。
  • --with-http-callback 支持http回调接口,用于认证,统计,事件处理等。参考:HTTP callback
  • --with-http-api 打开HTTP管理接口。参考:HTTP API
  • --with-http-server 打开内置HTTP服务器,支持分发HTTP流。参考:HTTP Server
  • --with-stream-caster 打开StreamCaster输入流协议转换功能。参考:Stream Caster
  • --with-kafka 打开Kafka支持,SRS将关键数据对接到Kafka集群。参考:Kafka
  • --with-ffmpeg 编译转码/转封装/采集用的工具FFMPEG。参考:FFMPEG
  • --with-transcode 直播流转码功能。需要在配置中指定转码工具。参考:FFMPEG
  • --with-ingest 采集文件/流/设备数据,封装为RTMP流后,推送到SRS。参考:Ingest
  • --with-stat 是否开启数据统计功能,SRS可以采集cpu/内存/网络/磁盘IO等数据,共监控系统通过http-api获取。(目前osx不支持)。
  • --with-research 是否编译research目录的文件,research目录是一些调研,譬如ts info是做HLS时调研的ts标准。和SRS的功能没有关系,仅供参考。
  • --with-utest 是否编译SRS的单元测试,默认开启,也可以关闭。
  • --with-gperf 是否使用google的tcmalloc库,默认关闭。
  • --with-gmc 是否使用gperf的内存检测,编译后启动srs会检测内存错误。这个选项会导致低性能,只应该在找内存泄漏时才开启。默认关闭。参考:gperf
  • --with-gmp 是否使用gperf的内存性能分析,编译后srs退出时会生成内存分析报告。这个选项会导致地性能,只应该在调优时开启。默认关闭。参考:gperf
  • --with-gcp 是否启用gperf的CPU性能分析,编译后srs退出时会生成CPU分析报告。这个选项会导致地性能,只应该在调优时开启。默认关闭。参考:gperf
  • --with-gprof 是否启用gprof性能分析,编译后srs会生成CPU分析报告。这个选项会导致地性能,只应该在调优时开启。默认关闭。参考:gprof
  • --with-librtmp 客户端推流/播放库,参考srs-librtmp
  • --with-arm-ubuntu12 交叉编译ARM上运行的SRS,要求系统是Ubuntu12。参考srs-arm
  • --jobs[=N] 开启的编译进程数,和make的-j(--jobs)一样,在configure时可能会编译nginx/ffmpeg等工具,可以开启多个jobs编译,可以显著加速。参考:Build: jobs
  • --static 使用静态链接。指定arm编译时,会自动打开这个选项。手动编译需要用户自身打开。参考:ARM

预设集:

  • --x86-x64,默认预设集,一般的x86或x64服务器使用。release使用这个配置编译。
  • --osx,苹果MAC OSX(Darwin)系统下编译,安装好xcode和brew后,可以使用这个选项。
  • --pi,树莓派预设集,arm的子集。树莓派的release用这个配置编译。
  • --cubie,在cubieboard下直接编译的选项,使用ubuntu差不多的配置集。
  • --arm,ubuntu下交叉编译,等价于--with-arm-ubuntu12。release使用这个配置。
  • --mips,ubuntu下交叉编译,为hiwifi的mips路由器编译。(目前srs在mips上有内存泄漏,2天左右会把路由器跑死)。
  • --dev,开发选项,尽可能开启功能。
  • --fast,关闭所有功能,只支持基本RTMP(不支持h264/aac),最快的编译速度。
  • --pure-rtmp,支持RTMP(支持h264+aac),需要编译ssl。
  • --rtmp-hls,支持RTMP和HLS,典型的应用方式。还可以加上内置的http服务器(--with-http-server)。
  • --disable-all, 禁用所有功能,只支持rtmp(vp6)。
  • --demo,SRS的演示编译选项。
  • --full,开启SRS所有的功能。

专家选项:有可能编译失败,不是专家就不要用这个。

  • --use-sys-ssl 使用系统的ssl,不单独编译ssl(在--with-ssl时有效)。
  • --export-librtmp-project=<path> 导出srs-librtmp工程到单独的目录。

Winlin 2014.11

Welcome to SRS wiki!

SRS 1.0 wiki

Please select your language:

SRS 2.0 wiki

Please select your language:

SRS 3.0 wiki

Please select your language:

Clone this wiki locally