我有一台自定义相机,可以录制视频和拍照。问题在于,录制并推送包含录制视频预览的视图控制器后,视频几秒后停止播放。
流程如下:
- 打开自定义相机;
- 录制视频;
- 显示包含录制视频预览的控制器(通过pushViewController(controller, animated: true));
- 视频开始播放;
- N秒后(1-2秒),由于某种原因视频停止。
代码如下:
- 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.
- setupVideoBackground() -> 在viewDidLoad/viewWillAppear中调用的AVPlayer配置函数。
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()
推送视图控制器:
let vc = TestController()
vc.url = url!
self.navigationController?.pushViewController(vc, animated: true)
注意:一个奇怪的现象是,如果我使用animated:false调用pushViewController,则播放器将播放完整视频;如果使用animated:true,则视频将在几秒钟后停止播放。此外,使用“present view controller”功能完美。
注意2:如果我使用DispatchQueue并延迟0.5秒调用setupVideoBackground()方法,则视频不会停止。
我不理解为什么在调用pushViewController(vc, animated: false)后视频可以正确播放,但在调用pushViewController(vc, animated: true)后视频会停止播放。
timeControlStatus
会返回waitingToPlayAtSpecifiedRate
几次,然后返回paused
值。这意味着rate
值为0.0。现在我需要理解为什么速率变成了0.0。 - Rodion Kuskov