快直播技术架构图
如上所示,是一线虚拟的网校“快直播”技术架构图。
在网校教学场景中,从主讲端推流,到视频CND节点分发,最后到用户侧设备播放,这 3 个过程,哪一个是最耗时的?直播延迟,主要延在了哪一步?第 2 步。
第 1 步,主讲端推流,可以使用上好的设备和充裕的带宽,甚至专线,保证上行速度。
第 2 步,采用 UDP 分发,甚至可以复用成熟多年、穿透能力强的 P2P 分发方案,保证从数据中心,低延迟分发各个运营商的边缘分发节点。这种分发方案避免了主要的分发延迟。
第 3 步,从边缘节点到用户设备,通过 WebSocket 连接边缘节点,使用 jsMpeg 播放 video1mpeg 视频流,延迟可以控制在 50ms。50ms 已经非常低了。
为什么在第 2 步可以使用 UDP 协议小数据包分发?因为在这个方案中,已经不是传统的视频整流在分发,而是一个个被打散的小视频数据包在分发。在数据中心,将上行的 RTSP 数据包,通过 ffmpeg 转为 video1mpeg 小数据包,这是使用 UDP 分发的关键。
在边缘节点,仅是对用户端做的数据负载均衡。在推流端,可以使用 obs studio,在 Windows & Mac 上均可以推流。
使用示例源码
链接:
https://github.com/rixingyike/gin-rtsp
可能遇到问题:
cannot find package "github.com/go-playground/validator/v10"
方法:
1、go get “gopkg.in/go-playground/validator.v10” 2、mkdir -p $GOPATH/src/vendor/github.com/go-playground/validator/v10 3、cp -rf $GOPATH/src/gopkg.in/go-playground/validator.v10/* $GOPATH/src/vendor/github.com/go-playground/validator/v10
参考链接: