繁体   English   中英

当我使用 seek 在 addBoundaryTimeObserver 中重复部分 AVQueuePlayer 时声音停止

[英]Sound stops when I use seek to repeat part of AVQueuePlayer inside addBoundaryTimeObserver

我有一个在 AVQueuePlayer 中播放的视频。 视频中有几个部分以缩略图的形式在视觉上表示。 用户可以选择一个或多个相邻的部分来仅重放视频的该段。

例如:

  • 第 1 节,从 0 秒到 2 秒,
  • 第 2 节,从 2 秒到 4 秒,
  • 第 3 节,从 4 秒到 6 秒。 用户可以选择在循环中只播放第 1 部分,或第 1 和 2 部分或 2 和 3 或 1 和 3

为此,我使用 addBoundaryTimeObserver 在每次视频到达部分末尾时触发调用。 当每个回调被触发时:

  • 如果当前时间是用户选择的最后一个部分的结束,我想返回到选择的第一个部分并从那里播放,循环。

问题来了:

  • 如果速率为 0.5 并且用户选择了多个部分,则返回第一部分时声音会停止,尽管视频正在播放。
  • 如果速率为 1.0 并且用户选择了任意数量的部分,则声音工作正常,循环播放
  • 如果比率为 0.5 并且用户只选择了一个部分,则声音工作正常,按原样循环播放。

我尝试设置任何可用的 AVAudioTimePitchAlgorithm 值。 他们没有帮助。 我曾尝试在搜索功能中使用 completionHandler。 那没有帮助。 我什至尝试在查找后添加延迟,认为需要一些时间。 那没有帮助。

关于这个的任何想法? 我很想知道为什么它在只有一个部分循环时有效,而当它返回到 2 个部分时却没有。

frontVideoPlayer?.addBoundaryTimeObserver(forTimes: callbackCMTimes, queue: DispatchQueue.main)  {
            [weak self] in
            print("Trigerred callback", self!.frontVideoPlayer?.currentTime())
            
            let roundedCurrent = (CMTimeGetSeconds((self!.frontVideoPlayer?.currentTime())!) * 10).rounded() / 10 // rounding up to 1 decimal point                
            let restartSelectionTime  = CMTimeGetSeconds(instructors[self!.instructorIndex].dances[self!.danceIndex].danceMoves[self!.endMove].endTime)
            
            if (roundedCurrent  == restartSelectionTime)  {
                print("RESTART SEGMENT. highlight ", self!.startMove )
                self!.frontVideoPlayer?.pause()
                self!.frontVideoPlayer?.seek(to: CMTimeAdd(instructors[self!.instructorIndex].dances[self!.danceIndex].danceMoves[self!.startMove].startTime, self!.timeToAdd), toleranceBefore: CMTime.zero, toleranceAfter: CMTime.zero , completionHandler: {_ in                        
                    DispatchQueue.main.asyncAfter(deadline: .now() + 2.5) {
                        self!.frontVideoPlayer?.rate = Float(self!.videoSpeed)
                    }
                })
         } }    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM