好的用户体验就是没有体验。
复杂性并不会消失,只会经过不断的理解学习和改善,让复杂性隐藏在一个configure和docker命令中。就像毛坯房并不能拎包入住,还需要装修、配套的商场、菜市场和学校,以及完善的交通。
致谢
SRT从无到有,是施维大神的努力。
SRT从有到好用,是志宏大神的努力。
两位大神有动力做SRT,原因之一是群里热情的SRT用户,在不断尝试和使用SRT。
问题在哪里
FFmpeg要自己编译出来,很难。
SRT要自己编译出来,比较难,因为有个钻石依赖问题(如下图),任何一步的设置或者版本有问题,肯定就编译失败了。
FFmpeg要编译SRT的支持,SRS也要编译SRT的支持,就真的有点难。
FFmpeg要编译SRT的支持,SRS也要编译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'
点开链接就能播放:
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)
目前已经支持FFmpeg静态链接的Docker镜像:
志宏大神改进的SRS中SRT的支持的Commit:
https://github.com/ossrs/srs/commit/90f1b482aSRT: Build SRT from source by SRS. 4.0.115
本文完。