随笔 - 936  文章 - 0  评论 - 3  阅读 - 30万

国标GB28181视频平台EasyGBS视频流会卡顿吗?网络卡顿情况下能接收视频流吗?

这几天翻了一下以前的博文,发现讲到频率比较多的还是关于视频流的卡顿、延时相关的问题,我已经迫切的感受到了大家对于视频流质量的要求了。

但是我不能否认,视频质量在5G时代,也是有很大发展空间的,像我们开发的支持国标GB28181协议的视频平台EasyGBS,可以说是一个比较完善成熟的视频平台了,但也会遇到视频流卡顿,或者无法播放的问题。

网络是衡量视频流质量高低的一个重要标准,当摄像头网络卡顿时,接收视频流的平台EasyGBS无疑会收到影响,点击播放视频的时候页面请求会一直得不到响应,导致程序误以为系统崩溃卡死。

经排查发现,是在网页点击播放之前,会向后端去请求播放地址,后端请求播放地址的时候回去获取视频编码,获取方式是循环的去读取流信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
VideoCode := 0
 
   for {
       tempstream := uas.Server.GetStreamFromRedis(stream.StreamID)
       if tempstream != nil {
           VideoCode = tempstream.VideoCode
       }
       if VideoCode == 0 {
           time.Sleep(time.Second * 1)
           continue
       }
       break
   }

  

这种做法不好之处就是没有添加超时返回,导致视频一直请求,但又一直得不到响应。

解决方案就是添加指定次数后超时返回,修改代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
VideoCode := 0
    loopcount := 0
    for {
        tempstream := uas.Server.GetStreamFromRedis(stream.StreamID)
        if tempstream != nil {
            VideoCode = tempstream.VideoCode
        }
        if loopcount >= 5 {
            break
        }
        if VideoCode == 0 {
            time.Sleep(time.Second * 1)
            loopcount++
            continue
        }
        break
    }

  

修改过后,假如摄像头网络不好,超时也会有返回数据,从而让服务器能够取读。

posted on   EasyGBS  阅读(351)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示