手摸手教你使用srs服务搭建毫秒级延时直播

        之所以要搭建一个在公网环境下一对一毫秒级延时的直播, 就是为了做一个不限遥控距离的小车, 使用安卓手机基于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

20210809162040371.png

下载完成后在当前目录下生成了一个srs目录.

        第二步进入到srs目录下的 trunk, 配置安装路径, 编译(编译即可, 无需安装)

20210809163809929.png

         如果在第二步出现编译错误, 请检查你的服务器是否安装好了依赖, 百度一下就可以了.

        安装成功后来到下面这个目录里, 会发现在该目录里都是*.conf的配置文件, 根据官网的说明, 这些配置文件里都详细的记载了不同需求的配置, 分类的非常详细, 其中full.conf是最全的, 有兴趣的小伙伴可以看看.

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         我直接修改的srs.conf, 以防万一, 小伙伴可以提前备份下srs.conf, 直接上我的配置.

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         这里重点说下candidate这个参数, 如果小伙伴查看官网的wiki, 也会发现这里是非常重要的, 为了方便, 我这里直接填写的阿里云公网服务器的ip地址, 小伙伴们填写自己的公网ip就好了.

        第二个要说明的参数是vhost__defaultVhost__节点下的http_hooks节点, 这个节点是用来推流和拉流鉴权验证的, 意思就是说, 如果其他人知道了我这台服务器ip, 岂不是可以随意的往这台服务器推流和拉流了么, 所以这个节点是配置回调地址用来做鉴权验证的, 有人向这台服务器推流或者拉流的时候, srs服务就会回调这个节点下的接口地址去做鉴权了, 当然回调地址里的鉴权代码就要自己写啦, 这个http_hooks节点小伙伴们可以注释掉, 否则你一定会推流和拉流失败的.

        其它参数可以自行查看官网wiki, 说的很清楚.

        接下来就是要保证你服务器防火墙的端口都要开启(或者你嫌麻烦就关闭防火墙和selinux, 但我不建议你这么做), 同样再登录阿里云的控制台, 确保相应端口都放开, 否则依然无法推流和拉流成功.

        需要用到的端口参考如下, 注意: 8000端口协议是udp

        20210810104235595.jpg

         接下来就是启动srs服务了, 我使用的是下面这种方式启动, 请注意执行的路径和启动加载的配置文件名

20210810105023342.png

         使用ps来查看下是否启动成功

20210810105258882.png

        在手机商店里下载一款杏林推流的软件, 在推流地址中输入自己的公网地址, 比如我填写的地址是: rtmp://123.73.219.18/live/12345678(这个ip地址一定要写自己公网的服务器ip, /live/12345678的含义请查看官网wiki, 这里不做过多解释), 分辨率默认是540P, 可以调的稍微小点, 比如360P, 然后点击开始推流, 注意这里点击了开始推流后只是进入了视频预览界面, 还需要再点一次预览界面下放的开始推流, 才是真正的推流到公网服务器. 这里说明下, 实际的遥控小车项目中, 我并没有使用杏林推流, 而是自己写的一个推流app.

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         下面就是进入拉流播放的阶段, 打开电脑浏览器访问 http://123.73.219.18:1985/console/ng_index.html#/connect, 会看到下面的页面.

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         点击连接到srs, 如果出现下面的页面, 恭喜你离成功近了一步.

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         点击上方菜单的视频流选项, 进入流管理和预览的页面, 如果你看到了下面的页面, 恭喜你, 离成功又近了一步

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         点击预览, 跳转至预览页面, 默认显示的是srs播放器的页面.

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         我们需要切换到RTC播放器的页面, 点击RTC播放器选项, 默认显示的页面如下

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bob2VuaXgzaw==,size_16,color_FFFFFF,t_70

         重点又来了, 如果此时你点击播放视频, 是根本看不到直播画面的, 因为URL的地址不对, 需要把 ".flv"删掉后再点击视频播放, 就能看到实时的直播画面了, 延时在毫秒级别, 已经满足我用来控制小车的需求了.

        

        

猜你喜欢

转载自blog.csdn.net/phoenix3k/article/details/119539293