EasyDSS如何对正在直播通道的定时快照获取方式进行简化?

本文介绍TSINGSEE青犀视频开发的EasyDSS平台快照功能,并对其进行了优化,减少无效数据处理,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TSINGSEE青犀视频开发的网页无插件视频直播点播平台EasyDSS为了便于大家的二次开发,提供了很多接口供大家调用,其中web界面快照的获取就是采用了快照接口的调用。

image.png

EasyDSS快照是从数据库中取出需要进行定时快照的数据,然后查询对应的直播间是否正在直播,如果正在直播,则进行截图功能,以下为源代码:

func InspectionSnap() {
   //获得待截图流ID
   var snaps []do.TSnap
   dao.GetDB().Table(consts.TableSnap).Find(&snaps)
   for _, snap := range snaps {
      if snap.LiveID != consts.EmptyString {
         if !snap.Actived ||
            snap.SnapReserve <= 0 ||
            (snap.BeginAt != nil && time.Now().Before(snap.BeginAt.ToTime())) ||
            (snap.EndAt != nil && time.Now().After(snap.EndAt.ToTime())) {
            return
         }
         for _, liveID := range strings.Split(snap.LiveID, consts.SplitComma) {
            //如果存在自动直播
            if mediaserver.HasLive(liveID) {
               // log.Println(time.Now(), time.Now().Unix(), snap.SnapTime.ToTime(), snap.SnapTime.ToTime().Unix())
               //判断是否达到截图时间
               if snap.SnapTime == nil || snap.SnapTime != nil && (time.Now().Unix()-snap.SnapTime.ToTime().Unix()) >= int64((snap.SnapInterval-7)) {
                  dao.GetDB().Table(consts.TableSnap).Where(consts.SqlWhereID, snap.ID).Update("snap_time", etime.Now())
                  trans.SnapLive(liveID, mediaserver.GetLocalRtmpUrl(liveID), snap.ResolutionW, snap.ResolutionH, nil)
               }
            }
         }
      }

   }
}

在审查代码时,发现每次都是从数据库中取出所有数据,然后再进行判断是否启用,这样取出的数据量非常大,而且取出很多无效数据,因此可以进行优化。

func InspectionSnap() {
   //获得待截图流ID
   var snaps []do.TSnap
   dao.GetDB().Table(consts.TableSnap).Where("actived = ?", true).Find(&snaps)
   for _, snap := range snaps {

      if snap.LiveID != consts.EmptyString {
         if snap.SnapReserve <= 0 ||
            (snap.BeginAt != nil && time.Now().Before(snap.BeginAt.ToTime())) ||
            (snap.EndAt != nil && time.Now().After(snap.EndAt.ToTime())) {
            return
         }
         for _, liveID := range strings.Split(snap.LiveID, consts.SplitComma) {
            //如果正在直播
            if mediaserver.HasLive(liveID) {
               // log.Println(time.Now(), time.Now().Unix(), snap.SnapTime.ToTime(), snap.SnapTime.ToTime().Unix())
               //判断是否达到截图时间
               if snap.SnapTime == nil ||
                  (snap.SnapTime != nil && (time.Now().Unix()-snap.SnapTime.ToTime().Unix()) >= int64((snap.SnapInterval-7))) {
                  dao.GetDB().Table(consts.TableSnap).Where(consts.SqlWhereID, snap.ID).Update("snap_time", etime.Now())
                  trans.SnapLive(liveID, mediaserver.GetLocalRtmpUrl(liveID), snap.ResolutionW, snap.ResolutionH, nil)
               }
            }
         }
      }

   }
}

其中以下语句为取出已经在启用状态的截图。

dao.GetDB().Table(consts.TableSnap).Where("actived = ?", true).Find(&snaps)

采用此种写法,对代码进行了优化。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值