首页 > 技术文章 > 城市智慧化视频监控图像分析平台EasyCVR视频通道停止播放后还会占用带宽吗?

easycvr 2021-04-09 16:12 原文

所有了解视频类应用的人都知道,视频网站的带宽才是重中之重。在线视频播放网站每天都会产生巨额的流量,每个客户都会占据非常大的带宽。如果带宽不够就会出现用户播放卡顿,甚至网站崩溃掉线的情况,而带宽过大则会造成非常高额的成本浪费。为了让用户更直观便捷确认视频播放时所占用的带宽,我们在EasyCVR视频平台的首页添加了带宽占用率的显示。

有时EasyCVR播放视频时会出现当用户停止播放的时候,页面带宽还是显示占用的情况。

播放前的带宽占用如下:

页面点击播放的时候带宽占用如下,可以看到带宽明显消耗许多:

当用户停止播放的时候带宽仍然没有降下来:

通过抓包分析我们发现,当用户不在播放的时候,调用的停止接口并没有生效,因此实际服务后台仍在进行视频传输。

添加如下代码,调用停流接口

if len(urlarr) >= 2 {
       namearr := strings.Split(urlarr[1], ".")
       if streamType == "playback" {
              streamurl := fmt.Sprintf("playback:%s:%s:%s", sipDev.DeviceID, gbchannels[0].ToSIPChannel().DeviceID, namearr[0])
              locker := gbchannels[0].Lock()
              if locker == nil {
                     err = fmt.Errorf("channel[%s:%s] is busy", gbchannels[0].DeviceID, gbchannels[0].ID)
                     return
              }
              defer locker.Unlock()
              uas.StreamStop(streamurl)

再次抓包分析,当用户停止播放过后,平台会主动发起停止播放接口,如此就不会再占用带宽了。

推荐阅读