前言
写这篇文章主要是因为希望找到一个简单的方式实现直播功能,在度娘上找到livego(我平时写php和前端的,不懂golang),感觉安装部署都很方便,即使不懂golang的同学,只要有一定Linux和web后端开发知识都能搭建自己的直播服务。但是livego的文档的确比较少,然后对于我这个面向搜索引擎开发的菜鸟来说,连度娘也只找到为数不多的几篇相关博客文章,所以最后只能自己看GitHub的issue和反复测试趟坑,最后打算记录一下自己的趟坑过程也分享一下给各位小伙伴,希望对你们有帮助。
LiveGo
安装和使用非常简单;
纯 Golang 编写,性能高,跨平台;
支持常用的传输协议、文件格式、编码格式;
安装(以编译好的二进制文件为例)
下载对应的二进制文件,打开这个地址查找自己需要的版本:https://github.com/gwuhaolin/livego/releases
放到服务器上进行解压
执行解压出来的livego文件以启动livego服务:./livego
在启动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前面的设置步骤也不说了,度娘也有很多,而且与技术没太大关系,这里直接说下重点:
在这里插入图片描述
注意:OBS这里填写的“串流秘钥”是刚刚自己定义的房间名喔,不是响应返回的MD5秘钥(这个MD5秘钥是有用的,后面会说到)
拉流(以flv为例,这里使用bilibili开源的flvjs)
复制以下代码,修改代码当中的flv播放地址并保存为html,直接在浏览器打开这个html就能看到直播画面了
<!DOCTYPE html>
<html>
<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,其他接口未测试过…所以需要自行测试一下,不知道有没有坑
查看当前推拉流的房间情况:http://你的服务器地址:8090/stat/livestat
直播房间拉流开关:http://你的服务器地址:8090/control/pull?&oper=start&app=live&name=房间名字&url=rtmp://你的服务器地址/live/房间名字 oper可传start或stop
直播房间推流开关:http://你的服务器地址:8090/control/push?&oper=start&app=live&name=房间名字&url=rtmp://你的服务器地址/live/房间名字 oper可传start或stop
重置直播房间(推测是重新生成channelkey或者停止全部推拉流的):http://你的服务器地址:8090/control/reset?room=房间名字
删除直播房间:http://你的服务器地址:8090/control/delete?room=房间名字
注意事项
建议用于控制台的8090端口不要对外放开,防止被外部请求
直播对带宽的要求真的挺高的,在我技术验证期间,各有一个推拉流的情况下,服务器提升到10M带宽还是有10-20秒的延迟,所以可能直接用各大云厂商的云直播服务更划算,性能也更好,因为如果真正生产环境多人直播时估计除了宽带,对CPU和内存的要求也会大幅提升。
livego的文档很少很少,然后听说(注意是听说,本人并未详细读过源码)livego的BUG比较多,但本人目前单纯是技术验证,并未应用到任何的测试或生产环境,如果的确需要应用到正式环境的,建议还是要读一读源码
除了livego还能通过nginx的rtmp模块实现直播
《本文》有 0 条评论