Clone
19
v1_CN_Build
winlin edited this page 2022-01-06 11:57:15 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

HOME > CN > Build

编译SRS

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

操作系统

  • README中的UsageCentos6.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的值改为disabledSELINUX=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的文件打包为zipzip比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/makest-1.9http-parser2.1ffmpegcherrypynginxopenssl-develpython2。

除了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转码用的FFMPEGDEMO推流也是用它
  • ./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可用于支持移动端HLSIOS/Android不过PC端jwplayer也支持HLS。参考HLS
  • --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-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 OSXDarwin系统下编译安装好xcode和brew后可以使用这个选项。
  • --pi树莓派预设集arm的子集。树莓派的release用这个配置编译。
  • --cubie在cubieboard下直接编译的选项使用ubuntu差不多的配置集。
  • --armubuntu下交叉编译等价于--with-arm-ubuntu12。release使用这个配置。
  • --mipsubuntu下交叉编译为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, 禁用所有功能只支持rtmpvp6
  • --demoSRS的演示编译选项。
  • --full开启SRS所有的功能。

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

  • --use-sys-ssl 使用系统的ssl不单独编译ssl在--with-ssl时有效

Winlin 2014.2