在直播系统中加入CDN,是传输内容尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输速度更快、更稳定。因此TSINGSEE青犀视频为了提高国标协议下视频传输的质量,在国标GB28181协议视频平台EasyGBS通道添加了CDN功能。
EasyGBS通道添加CDN功能的具体表现就是在每个设备播放的时候传入CDN地址,然后程序收流的时候会将流数据转推到这个地址。
后端添加代码如下:
代码语言:javascript复制defer func() {
if p := recover(); p != nil {
c.AbortWithStatusJSON(400, fmt.Sprintf("%v", p))
return
}
}()
type Form struct {
Serial string `form:"serial" binding:"required"`
Code string `form:"code" binding:"required"`
Cdn string `form:"cdn"`
}
var form = Form{}
if err := c.Bind(&form); err != nil {
return
}
device := models.GetDevice(form.Serial)
if device == nil {
c.AbortWithStatusJSON(400, fmt.Sprintf("device[%s] not found", form.Serial))
return
}
channelInfo := models.GetChannel(form.Code, form.Serial)
if channelInfo == nil {
c.AbortWithStatusJSON(400, fmt.Sprintf("channel[%s] not found", form.Code))
return
}
db.SQLite.Model(models.Channel{}).Where("id = ? and device_id=?", form.Code, form.Serial).Update("cdn", form.Cdn)
首先查询数据库是否有这个设备,再根据传入的参数code查询数据库在这个设备下是否有这个通道。然后修改这个通道的CDN地址,前端在播放的视频流传递过来,然后后端播放时将流数据转推到该地址。
下面我们测试一下,当在EasyGBS播放的时候,播放界面如下:
同时播放这个RTMP的推流cCDN地址,也可以正常播放,功能实现正常。
TSINGSEE青犀视频开发的多种视频平台中,有支持国标GB28181协议的EasyGBS,有支持RTSP协议的EasyNVR,有支持RTMP协议的EasyDSS,当然也有兼容目前市面上大部分常见协议的EasyCVR平台。经过不断优化和调试,TSINGSEE青犀视频的平台已经在多个项目领域实践落地,如果大家有需求,欢迎联系我们获取测试账号进行实际部署测试,更多视频相关解决方案,欢迎访问TSINGSEE青犀视频官网。