视频直播是近些年特别火的技术栈,一直想学习如何实现视频直播。初期也了解了一些协议相关的知识,苦于都是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中配置源

628bf39eeb1d51e6e0106e4bd5b6d08a.png ## 总结

  • GO真的是一个好语言,一个好的粘合剂
  • 前端工具真麻烦,像php的composer多好,还是前端的变化太快,跟不上潮流,还是喜欢一些底层一点的不那么麻烦。
  • 直播
    • 协议的实现
    • 流的上行
    • 流的下行
  • 还有一些其他的可以学习的内容比如
    • 视频的格式
    • 流的缓存
    • 压力测试
    • 负载均衡

等等视频直播是一个大的技术栈不是像我这种简单的玩一下的,如果想深入做还是需要一定的功力和精力。只是供大家学习和体验。