视频直播是近些年特别火的技术栈,一直想学习如何实现视频直播。初期也了解了一些协议相关的知识,苦于都是 c++相关学习起来比较难以理解,学习了 Go 语言之后突然想找一找是否有 Go 语言实现的直播服务,惊奇的发现,Livego 这个开源直播服务端,自此展开了 Go 直播实践之路,由于工作繁重,只能抽时间搞,耽误了好几天的更新,话不多说直入正题。
服务端
- livego 精挑细选 简单可靠 便于二次开发
- livego 的相关参数可以看源码或者 help 非常直观
- 对于服务端不是很难编译到运行不到 2 分钟,主要是注意推流时,格式的选取
- 上行推流:使用 ffmpeg 上行视频流
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://192.168.112.20:1935/live/movie 总结:服务端是较为简单的没有任何难点
客户端
对于一个服务端来说,客户端编码是最让人头疼的。我选取的 h5 客户端流解析工具flv.js
题外话 对于前端工具真的很烦,npm 安装可把我搞惨了,我是虚拟机+共享目录,我在虚拟机中 npm install 它居然不认识我的共享目录,总是在 rename 的时候,提示权限有误无法操作,致使我在构建 flv.js 客户端环境上花了大量的时间,把一个两天搞定的事,一周才搞定。我是通过在虚拟机其他目录进行 install 在将安装好的文件拷贝到共享目录,最终还是搞定了。还有吐槽一下哔哩哔哩这么一个厉害的前端同学才给 5000 的工资真的说不过去。给做开源的各位大大点赞。
- 安装环境
- 克隆 github
- npm install
- npm install -g gulp
- gulp release 不知道这些组件是干什么用的,就按就得了哈哈
测试
- nginx 配置 demo
- 编译开启服务
go build ./livego - 推流
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://192.168.112.20:1935/live/movie - demo 中配置源

总结
- GO 真的是一个好语言,一个好的粘合剂
- 前端工具真麻烦,像 php 的 composer 多好,还是前端的变化太快,跟不上潮流,还是喜欢一些底层一点的不那么麻烦。
- 直播
- 协议的实现
- 流的上行
- 流的下行
- 还有一些其他的可以学习的内容比如
- 视频的格式
- 流的缓存
- 压力测试
- 负载均衡
等等视频直播是一个大的技术栈不是像我这种简单的玩一下的,如果想深入做还是需要一定的功力和精力。只是供大家学习和体验。 转自: https://xiangdong1987.github.io/go/live/2019/04/16/Go_live-1.html
