zoukankan      html  css  js  c++  java
  • 【BUG修复】解决RTMP推流协议视频直播点播平台EasyDSS内直播列表信息偶尔不存在的问题

    TSINGSEE青犀视频团队在最近一年内对大部分已经开发的视频平台做了一次大的调整和优化,诸如EasyDSS、EasyGBS等视频平台在界面、操作方式、功能上都有了不同程度的改变。EasyDSS视频直播点播平台开发简单,提供编程语言无关化的RESTfulAPI接口,可以很便捷的进行二次开发和应用,在远程教育、远程医疗都具备优势。

    视频平台EasyDSS中如果在接入的设备过多的情况下,流媒体的处理系统偶尔会出现卡顿现象。此时如果频繁的请求在线直播信息的话,直播列表可能为空,导致直播列表信息返回为空。

    因为一旦接入的数量过多,内核处理不过来,导致系统卡顿。这样的应用层在请求流媒体服务的时候就会请求不到任何的数据,但此时之前的数据又被删除了,所以出现了一小段时间的数据空白期。

    因此解决问题的时候,我们就可以在项目启动的时候开启定时任务,每隔一秒钟对流媒体系统发送http的请求,将请求到的数据进行及时的更新。

        if !gUpdateSession {
    
          gUpdateSession = true
    
          allInfos := make([]*SessionInfo, 0)
          // 1. 更新本地数据
          infos, err := getLiveSessions(consts.EmptyString)
          if err != nil {
             errorLogger.Error(err.Error())
          } else {
             allInfos = append(allInfos, *infos...)
          }
    
          // 2. 查看集群,如果有集群数据,则从集群中更新数据到全局中
          servers := cluster.GetServerALL()
          if servers != nil {
             for _, server := range servers {
                infos, err = getLiveSessions(fmt.Sprintf("%v:%v", server[consts.FieldNameIP], server[consts.FieldNameDSSHttpPort]))
                if err != nil {
                   errorLogger.Error(err.Error())
                } else {
                   allInfos = append(allInfos, *infos...)
                }
             }
          }
    
          // 更新所有数据
          gLiveSessions.Update(allInfos)
    
          gUpdateSession = false
       }
    }
    

    更新后系统将会及时处理所有数据,避免空白段的情况出现。

    该问题就此解决,如果大家比较关心我们前文提到的EasyDSS在实际项目中的运用,可以阅读:远程教育视频直播点播解决方案如何实现教学直播+录播+在线考试?

    TSINGSEE青犀视频云边端架构产品还包括EasyGBS、EasyNVR、EasyCVR等优秀的视频智能分析平台,欢迎大家了解和测试。

  • 相关阅读:
    信号量进程同步,王明学learn
    信号量互斥,王明学learn
    信号通讯编程,王明学learn
    管道通信,王明学learn
    多进程程序设计,王明学learn
    进程控制理论,王明学learn
    分布式系统间的通信框架
    qrcode.js生成二维
    浅谈spring 声明式事物
    索引失效浅谈
  • 原文地址:https://www.cnblogs.com/easydss/p/14116395.html
Copyright © 2011-2022 走看看