Go 直播实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiangdong1987
V2EX    视频技术

Go 直播实践

  •  1
     
  •   xiangdong1987 2019-04-17 15:59:20 +08:00 2372 次点击
    这是一个创建于 2368 天前的主题,其中的信息可能已经有所发展或是发生改变。

    视频直播是近些年特别火的技术栈,一直想学习如何实现视频直播。初期也了解了一些协议相关的知识,苦于都是 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 多好,还是前端的变化太快,跟不上潮流,还是喜欢一些底层一点的不那么麻烦。
    • 直播
      • 协议的实现
      • 流的上行
      • 流的下行
    • 还有一些其他的可以学习的内容比如
      • 视频的格式
      • 流的缓存
      • 压力测试
      • 负载均衡

    等等视频直播是一个大的技术栈不是像我这种简单的玩一下的,如果想深入做还是需要一定的功力和精力。只是供大家学习和体验。 转自: https://xiangdong1987.github.io/go/live/2019/04/16/Go_live-1.html

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2764 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 14:43 PVG 22:43 LAX 07:43 JFK 10:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86