好的用户体验就是没有体验。
复杂性并不会消失,只会经过不断的理解学习和改善,让复杂性隐藏在一个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):
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推流:
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代码:
git clone -b 4.0release https://gitee.com/ossrs/srs.git &&cd srs/trunk
SRS支持源代码编译SRT,也很方便:
./configure --srt=on && make &&./objs/srs -c conf/srt2rtc.conf
Build SRT/SRS by Docker
还有一种编译代码的,更容易的方法,就是用开发Docker环境编译SRT/SRS,因为依赖都已经安装好了,所以几乎不会出现编译问题。
获取SRS代码:
git clone -b 4.0release https://gitee.com/ossrs/srs.git &&cd srs/trunk
在Docker中编译和启动SRS:
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):
[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:
https://github.com/ossrs/srs/commit/90f1b482aSRT: Build SRT from source by SRS. 4.0.115
本文完。