录制后来自临时目录的AVPlayer视频在几秒钟后停止播放

问题描述 投票:0回答:1

我有一个自定义相机,可以录制视频和拍照。问题是在录制并通过录制的视频预览推送viewController后,视频在几秒钟后停止播放。因此流程为:

  1. 打开自定义相机;
  2. 我已经录制了视频;
  3. 显示带有录制的视频预览的控制器。 (通过pushViewController(controller,animation:true));
  4. 视频开始播放;
  5. 由于某种原因,N秒(1-2秒)后视频停止。

代码:

  1. didFinishRecordingTo outputFileURL:
        if let error = error {
            // handle error
            return
        }

        if let currentBackgroundRecordingID = backgroundRecordingID {
            backgroundRecordingID = UIBackgroundTaskIdentifier.invalid

            if currentBackgroundRecordingID != UIBackgroundTaskIdentifier.invalid {
                UIApplication.shared.endBackgroundTask(currentBackgroundRecordingID)
            }
        } 
       // open viewController and play recently recorded video from temporary files.
  1. setupVideoBackground()-> AVPlayer的配置,在viewDidLoad / viewWillAppear中调用:
        let player = AVPlayer(url: url)
        player.actionAtItemEnd = .none

        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.view.frame
        playerLayer.videoGravity = .resizeAspectFill

        self.view.layer.insertSublayer(playerLayer, at: 0)

        player.seek(to: .zero)
        player.play()
  1. 推视图控制器:
        let vc = TestController()
        vc.url = url!
        self.navigationController?.pushViewController(vc, animated: true)   

注:一件奇怪的事情,如果我将pushViewController与animation:一起使用,则播放器将播放完整的视频,而如果对animation:true进行播放,则视频将在几秒钟后停止播放。另外,当前的视图控制器也可以正常工作。

注2:如果我使用DispatchQueue延迟了0.5秒调用setupVideoBackground(),视频将不会停止。

我不明白,为什么视频在pushViewController(vc, animated: false)之后正确播放而在pushViewController(vc, animated: true)之后停止播放?>

我有一个自定义相机,可以录制视频和拍照。问题是在录制并通过录制的视频预览推送viewController后,视频在几秒钟后停止播放。因此...

ios swift avfoundation grand-central-dispatch avplayer
1个回答
0
投票

解决方案1:

© www.soinside.com 2019 - 2024. All rights reserved.