之所以要搭建一个在公网环境下一对一毫秒级延时的直播, 就是为了做一个不限遥控距离的小车, 使用安卓手机基于aoa协议+4g/5g实现, 理论上只要电池有电(可采用太阳能方案)和有4g/5g信号的地方, 坐在屋里可以遥控着小车满世界的跑...不好意思跑题了, 进入正题.
srs服务之强大我不废话, 如果想看官方wiki, 请直接移步github或者gitee, 我建议访问gitee: 因为速度快https://gitee.com/winlinvip/srs.oschina/wikis/v4_CN_Home(目前版本更迭到v4.0.150), 我对官方wiki印象最深的一句话就是"不读Wiki一定扑街", 其实我想说, 即便你看了官方文档也有可能扑街, 如果按照官方文档上搭建一个直播延时在2~5秒服务的话比较简单, 按照官网一步步做就好了, 但是我为了实现毫秒级的延时, 发现按照官网的文档操作起来有点吃力, 或者说没办法达到我预期的效果, 可能我阅读文档时不够仔细或者理解不够到位吧, 不过我还是根据官网琢磨了一套能实现毫秒级延时直播的方法, 仅供参考.
本文介绍的是使用rtmp推流, webrtc拉流的方式, 官网上介绍了多种推拉流方式, 每种方式的延时情况都不一样, 详情可参考官网.
先说下我的前期准备, 很简单, 一台阿里云的服务器(CentOS 7.6), 具体配置: 8g内存, 2核cpu, 5m的带宽(搞直播嘛, 内存和cpu可以要求不那么高, 但是带宽要稍微高一些), 一部安卓手机, 一台电脑, 没了.
官网推荐使用Docker来安装srs服务, 只是推荐, 实际根据个人情况而定, 我使用的是源码编译安装的方式, 本文也是基于此种方式, 如果读者非要用Docker安装, 请直接移步github或者gitee.
我下载安装的目录是 /root 读者可根据自己的喜好选择下载安装目录.
第一步下载, 依然推荐gitee, 如果你对自己的网速有信心请移步github
下载完成后在当前目录下生成了一个srs目录.
第二步进入到srs目录下的 trunk, 配置安装路径, 编译(编译即可, 无需安装)
如果在第二步出现编译错误, 请检查你的服务器是否安装好了依赖, 百度一下就可以了.
安装成功后来到下面这个目录里, 会发现在该目录里都是*.conf的配置文件, 根据官网的说明, 这些配置文件里都详细的记载了不同需求的配置, 分类的非常详细, 其中full.conf是最全的, 有兴趣的小伙伴可以看看.
我直接修改的srs.conf, 以防万一, 小伙伴可以提前备份下srs.conf, 直接上我的配置.
这里重点说下candidate这个参数, 如果小伙伴查看官网的wiki, 也会发现这里是非常重要的, 为了方便, 我这里直接填写的阿里云公网服务器的ip地址, 小伙伴们填写自己的公网ip就好了.
第二个要说明的参数是vhost__defaultVhost__节点下的http_hooks节点, 这个节点是用来推流和拉流鉴权验证的, 意思就是说, 如果其他人知道了我这台服务器ip, 岂不是可以随意的往这台服务器推流和拉流了么, 所以这个节点是配置回调地址用来做鉴权验证的, 有人向这台服务器推流或者拉流的时候, srs服务就会回调这个节点下的接口地址去做鉴权了, 当然回调地址里的鉴权代码就要自己写啦, 这个http_hooks节点小伙伴们可以注释掉, 否则你一定会推流和拉流失败的.
其它参数可以自行查看官网wiki, 说的很清楚.
接下来就是要保证你服务器防火墙的端口都要开启(或者你嫌麻烦就关闭防火墙和selinux, 但我不建议你这么做), 同样再登录阿里云的控制台, 确保相应端口都放开, 否则依然无法推流和拉流成功.
需要用到的端口参考如下, 注意: 8000端口协议是udp
接下来就是启动srs服务了, 我使用的是下面这种方式启动, 请注意执行的路径和启动加载的配置文件名
使用ps来查看下是否启动成功
在手机商店里下载一款杏林推流的软件, 在推流地址中输入自己的公网地址, 比如我填写的地址是: rtmp://123.73.219.18/live/12345678(这个ip地址一定要写自己公网的服务器ip, /live/12345678的含义请查看官网wiki, 这里不做过多解释), 分辨率默认是540P, 可以调的稍微小点, 比如360P, 然后点击开始推流, 注意这里点击了开始推流后只是进入了视频预览界面, 还需要再点一次预览界面下放的开始推流, 才是真正的推流到公网服务器. 这里说明下, 实际的遥控小车项目中, 我并没有使用杏林推流, 而是自己写的一个推流app.
下面就是进入拉流播放的阶段, 打开电脑浏览器访问 http://123.73.219.18:1985/console/ng_index.html#/connect, 会看到下面的页面.
点击连接到srs, 如果出现下面的页面, 恭喜你离成功近了一步.
点击上方菜单的视频流选项, 进入流管理和预览的页面, 如果你看到了下面的页面, 恭喜你, 离成功又近了一步
点击预览, 跳转至预览页面, 默认显示的是srs播放器的页面.
我们需要切换到RTC播放器的页面, 点击RTC播放器选项, 默认显示的页面如下
重点又来了, 如果此时你点击播放视频, 是根本看不到直播画面的, 因为URL的地址不对, 需要把 ".flv"删掉后再点击视频播放, 就能看到实时的直播画面了, 延时在毫秒级别, 已经满足我用来控制小车的需求了.