SRS+SRT从“有”到“好用”的飞跃

2022-03-18 17:13:08 浏览数 (1)

好的用户体验就是没有体验。

复杂性并不会消失,只会经过不断的理解学习和改善,让复杂性隐藏在一个configure和docker命令中。就像毛坯房并不能拎包入住,还需要装修、配套的商场、菜市场和学校,以及完善的交通。

致谢

SRT从无到有,是施维大神的努力。

SRT从有到好用,是志宏大神的努力。

两位大神有动力做SRT,原因之一是群里热情的SRT用户,在不断尝试和使用SRT。

问题在哪里

FFmpeg要自己编译出来,很难。

SRT要自己编译出来,比较难,因为有个钻石依赖问题(如下图),任何一步的设置或者版本有问题,肯定就编译失败了。

FFmpeg要编译SRT的支持,SRS也要编译SRT的支持,就真的有点难。

FFmpeg要编译SRT的支持,SRS也要编译SRT的支持,就真的有点难。

  • 提供FFmpeg的Docker,静态编译libsrt和其他依赖,可以直接使用,也可以拷贝出来在对应的系统中使用。
  • 将libsrt代码放到SRS,SRS编译和链接libsrt,可以直接使用,不再依赖外部SRT的库,用起来感受不到这个钻石依赖。

好的用户体验就是没有体验。要做到好用很难,特别是音视频项目,复杂性并不会消失,只会经过不断的理解学习和改善,让复杂性隐藏在一个configure和docker命令中。

这并不意味着之前做得不够好,横向了解下开源项目,就可以发现不好用是常态,完善的文档和简单的依赖是比较少的。开源项目没有完善的研发 产品 文档 测试团队。

目前很多人对开源的理解,还只停留在代码的阶段。可惜代码在github上开源并不能被一般的开发者使用,就像毛坯房并不能拎包入住,还需要装修、配套的商场、菜市场和学校,以及完善的交通。

一言不合就要自己搞个RTMP Server的朋友,不如花时间来一起做SRS。

SRT Docker

Docker是最快能将SRT全链路跑起来的方法

Note:FFmpeg开启了各种常用编解码器:libx264,libmp3lame,libfdk-aac,dash ,libsrt。其中,libsrt静态链接到FFmpeg就是这次志宏大神专门搞定的。我虽然混音视频编译也好久了,由于平时不用SRT,也不知道怎么把这个静态编译到FFmpeg。

不需要任何编译,直接启动SRS(SRT):

代码语言:javascript复制
docker run --rm -it     -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8085:8085     -p 10080:10080/udp     registry.cn-hangzhou.aliyuncs.com/ossrs/srs:v4.0.115     ./objs/srs -c conf/srt2rtc.conf

同样不需要编译,直接SRT推流:

代码语言:javascript复制
docker run --rm --network=host   registry.cn-hangzhou.aliyuncs.com/ossrs/srs:encoder   ffmpeg -re -i ./doc/source.flv -c copy -f mpegts     'srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=publish'

点开链接就能播放:

  • VLC(RTMP): rtmp://localhost/live/livestream
  • H5(HTTP-FLV): http://localhost:8080/live/livestream.flv

Build SRT/SRS from Source

获取SRS代码:

代码语言:javascript复制
git clone -b 4.0release https://gitee.com/ossrs/srs.git &&cd srs/trunk

SRS支持源代码编译SRT,也很方便:

代码语言:javascript复制
./configure --srt=on && make &&./objs/srs -c conf/srt2rtc.conf

Build SRT/SRS by Docker

还有一种编译代码的,更容易的方法,就是用开发Docker环境编译SRT/SRS,因为依赖都已经安装好了,所以几乎不会出现编译问题。

获取SRS代码:

代码语言:javascript复制
git clone -b 4.0release https://gitee.com/ossrs/srs.git &&cd srs/trunk

在Docker中编译和启动SRS:

代码语言:javascript复制
docker run --rm -it -v `pwd`:/srs -w /srs     -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8085:8085     -p 10080:10080/udp     registry.cn-hangzhou.aliyuncs.com/ossrs/srs:dev     bash -c "./configure --srt=on && make && ./objs/srs -c conf/srt2rtc.conf"

后记

encoder镜像中的FFmpeg,可以直接使用,比如推流,或者拷贝出来使用,或者转码。

SRS的开发Docker中,提供了可以用的FFmpeg,而且FFmpeg全部静态链接,包括SRT、x264和AAC(下面展示部分FFmpeg依赖,只有系统依赖,不需要额外拷贝so):

代码语言:javascript复制
[root@f443dc9dea95 ~]# which ffmpeg/usr/local/bin/ffmpeg

[root@f443dc9dea95 ~]# ldd /usr/local/bin/ffmpeg     libxml2.so.2 => /lib64/libxml2.so.2 (0x00007fa4837f3000)    libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fa4833cd000)    libstdc  .so.6 => /lib64/libstdc  .so.6 (0x00007fa482ea9000)    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fa4826b1000)
代码语言:javascript复制

目前已经支持FFmpeg静态链接的Docker镜像:

  • SRS开发镜像,CentOS 6:ossrs/dev6,这个镜像本身支持了libsrt,由于SRS的SRT依赖C 11,所以还不能用。
  • SRS开发镜像,CentOS 7:ossrs/dev
  • SRS开发镜像,CentOS 8:ossrs/dev8
  • SRS开发镜像,Ubuntu 16 xenial:ossrs/ubuntu16
  • SRS开发镜像,Ubuntu 18:ossrs/ubuntu18
  • SRS开发镜像,Ubuntu 20:ossrs/ubuntu20
  • SRT开发镜像,CentOS 7:ossrs/srt,不再需要这个额外的专门镜像编译SRT。
  • FFmpeg镜像,CentOS 7:ossrs/encoder

志宏大神改进的SRS中SRT的支持的Commit:

代码语言:javascript复制
https://github.com/ossrs/srs/commit/90f1b482aSRT: Build SRT from source by SRS. 4.0.115

本文完。

0 人点赞