livego介绍、安装、使用详解

前言

写这篇文章主要是因为希望找到一个简单的方式实现直播功能,在度娘上找到livego(我平时写php和前端的,不懂golang),感觉安装部署都很方便,即使不懂golang的同学,只要有一定Linux和web后端开发知识都能搭建自己的直播服务。但是livego的文档的确比较少,然后对于我这个面向搜索引擎开发的菜鸟来说,连度娘也只找到为数不多的几篇相关博客文章,所以最后只能自己看GitHub的issue和反复测试趟坑,最后打算记录一下自己的趟坑过程也分享一下给各位小伙伴,希望对你们有帮助。以下是正文:

介绍

LiveGo
简单高效的直播服务器:
安装和使用非常简单;
纯 Golang 编写,性能高,跨平台;
支持常用的传输协议、文件格式、编码格式;

安装(以编译好的二进制文件为例)

  1. 下载对应的二进制文件,打开这个地址查找自己需要的版本:https://github.com/gwuhaolin/livego/releases
  2. 放到服务器上进行解压
  3. 执行解压出来的livego文件以启动livego服务:./livego
  4. 在启动livego服务后默认会监听以下端口:
    8090端口:用于控制台,通过HTTP请求可查看与控制直播房间的推拉流
    1935端口:用于RTMP推拉流,目前貌似只能通过RTMP方式推流
    7001端口:用于FLV拉流
    7002端口:用于HLS拉流

用法

创建直播房间:

请求:http://你的服务器地址:8090/control/get?room=房间名字(房间名字你自己自定义)
成功响应:{“status”:200,“data”:一段与房间名对应的MD5秘钥}

推流(以PC端的OBS为例):

OBS是开源免费的软件,OBS的下载安装就不介绍了,度娘一大堆,一直狂点下一步就好了,连OBS都不懂安装的人,估计也不会看到这里。OBS前面的设置步骤也不说了,度娘也有很多,而且与技术没太大关系,这里直接说下重点:
livego介绍、安装、使用详解_第1张图片

注意:OBS这里填写的“串流秘钥”是刚刚自己定义的房间名喔,不是响应返回的MD5秘钥(这个MD5秘钥是有用的,后面会说到)

拉流(以flv为例,这里使用bilibili开源的flvjs)

复制以下代码,修改代码当中的flv播放地址并保存为html,直接在浏览器打开这个html就能看到直播画面了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>直播测试</title>
</head>
<body>
    <!-- 通过CDN直接引入flvjs -->
    <script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.6.1/flv.min.js"></script>
    <div  style="text-align: center;">
        <video id="liveTest" style="height: 100%;width: 100%;"></video>
    </div>
    <script>
        if (flvjs.isSupported()) {
            flvjs.createPlayer({
                type: 'flv',
                isLive: true,
                url: 'flv拉流直播地址'
            })
            .attachMediaElement(document.getElementById('liveTest'))
            .load()
            .play()
        }
    </script>
</body>
</html>

刚刚提到MD5秘钥是有用的,就是用在拉流的时候,所以上面代码中的flv拉流地址应该为:
http://你的服务器地址:7001/live/刚刚创建房间响应返回的MD5秘钥.flv
注意:拉流播放这里有点小坑,因为这个播放地址在GitHub上面的livego官方README中也是描述错误的,我也是反复测试了几次才发现是用刚刚的MD5秘钥

控制台其他接口:

以下接口我只用过/stat/livestat,其他接口未测试过…所以需要自行测试一下,不知道有没有坑

  1. 查看当前推拉流的房间情况:http://你的服务器地址:8090/stat/livestat
  2. 直播房间拉流开关:http://你的服务器地址:8090/control/pull?&oper=start&app=live&name=房间名字&url=rtmp://你的服务器地址/live/房间名字 oper可传start或stop
  3. 直播房间推流开关:http://你的服务器地址:8090/control/push?&oper=start&app=live&name=房间名字&url=rtmp://你的服务器地址/live/房间名字 oper可传start或stop
  4. 重置直播房间(推测是重新生成channelkey或者停止全部推拉流的):http://你的服务器地址:8090/control/reset?room=房间名字
  5. 删除直播房间:http://你的服务器地址:8090/control/delete?room=房间名字

注意事项:

  1. 建议用于控制台的8090端口不要对外放开,防止被外部请求
  2. 直播对带宽的要求真的挺高的,在我技术验证期间,各有一个推拉流的情况下,服务器提升到10M带宽还是有10-20秒的延迟,所以可能直接用各大云厂商的云直播服务更划算,性能也更好,因为如果真正生产环境多人直播时估计除了宽带,对CPU和内存的要求也会大幅提升。
  3. livego的文档很少很少,然后听说(注意是听说,本人并未详细读过源码)livego的BUG比较多,但本人目前单纯是技术验证,并未应用到任何的测试或生产环境,如果的确需要应用到正式环境的,建议还是要读一读源码

除了livego还能通过nginx的rtmp模块实现直播

但这个…我还没技术验证过,度娘看了一下貌似实现起来不复杂,而且可靠性应该会高些,文档也会相对多一些,但因为我没实现过,所以就不误导其他同学了,可自行度娘试试看。

你可能感兴趣的:(golang,linux)