EasyDSS视频平台同时支持视频直播和点播,在网校课堂方面,EasyDSS能很好的模拟课堂场景,并且不受时间、空间的限制,因此EasyDSS在很多课堂直播的项目应用中已经落地。

EasyDSS中的点播支持不同清晰度的切换,在基础配置中设置即可,但是近期我们发现如果设置了多清晰度转码,原始分辨率设置的是原画,那么在播放点播视频的时候,切换到除了原画以外的其他分辨率播放视频,都是无法听到声音的。

通过对代码的分析,我们得知是除了H264编码的视频,其他格式基本上都会出现这种情况。

于是我们几乎可以确定问题出现的原因是在代码编写中,只针对了H264格式实现了清晰度的转码播放功能,其他编码格式并没有进行转码,所以导致听不到声音。

因此在处理该问题的时候,我们在代码中添加判断:如果不是H264编码格式的视频,那么在清晰度转码的时候,同样需要进行与格式对应的转码操作。

判断条件的参考代码如下:

if aspect != "" {
   if sizes := strings.SplitN(aspect, "x", 2); len(sizes) == 2 {
      w, _ := strconv.ParseFloat(sizes[0], 64)
      h, _ := strconv.ParseFloat(sizes[1], 64)
      switch defType {
      case consts.DefinitionSD: //640x360
         nh := math.Ceil(640 / w * h)
         if int(nh)%2 != 0 {
            nh++
         }
         args = append(args, "-acodec", acodec, "-vcodec", vcodec, "-s", fmt.Sprintf("640x%v", nh), "-b", "300k")
      case consts.DefinitionHD: //1280x720
         nh := math.Ceil(1280 / w * h)
         if int(nh)%2 != 0 {
            nh++
         }
         args = append(args, "-acodec", acodec, "-vcodec", vcodec, "-s", fmt.Sprintf("1280x%v", nh), "-b", "500k")
      case consts.DefinitionFHD: //1920x1080
         nh := math.Ceil(1920 / w * h)
         if int(nh)%2 != 0 {
            nh++
         }
         args = append(args, "-acodec", acodec, "-vcodec", vcodec, "-s", fmt.Sprintf("1920x%v", nh), "-b", "1000k")
      }
   }
}

除线上教育外,EasyDSS也已经支持集成VR视频播放,具体可了解:视频智能分析/人脸识别平台EasyDSS实现景区智慧旅游体系,VR+大数据打造风景区实时视频。如果还想了解更多视频相关解决方案,欢迎联系我们。

posted on 2021-02-23 17:30  EasyDSS  阅读(53)  评论(0编辑  收藏  举报