비디오를 녹화하고 사진을 찍을 수있는 맞춤형 카메라가 있습니다. 문제는 녹화 된 비디오 미리보기로 viewController를 녹화하고 누른 후 몇 초 후에 비디오 재생이 중지된다는 것입니다. 따라서 흐름은 다음과 같습니다.
- 커스텀 카메라가 열렸습니다.
- 비디오를 녹화했습니다.
- 녹화 된 비디오 미리보기가있는 컨트롤러가 표시됩니다. (pushViewController (controller, animated : true)에 의해);
- 비디오 재생이 시작되었습니다.
- N 초 (1-2 초) 후 어떤 이유로 비디오가 중지되었습니다.
코드:
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.
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이면 몇 초 후에 비디오가 중지된다는 것입니다. 또한 현재 뷰 컨트롤러는 완벽하게 작동합니다.
참고 2 : DispatchQueue를 사용하여 0.5 초 지연된 setupVideoBackground ()를 호출하면 비디오가 중지되지 않습니다.
이해할 수 없습니다. 왜 비디오가 올바르게 재생 pushViewController(vc, animated: false)
되고 재생이 중지 되었는지pushViewController(vc, animated: true)
해결 방법 1 :viewDidDissapear
카메라 화면에 문제가있었습니다 . 있었다 cameraSession.stopSession()
. stopSession이 호출 될 때마다 avplayer는 재생을 중지합니다. 그 이유와 방법을 모른다 AVCaptureSession.stopSession()
관련이 AVPlayer
있지만, 제거 cameraSession.stopSession()
에서 viewDidDissapear
고정 문제.
해결 방법 2 : AVAudioSession 범주를로 설정 .playAndRecord
하면 비디오가 올바르게 재생됩니다.
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .videoRecording, options: [.mixWithOthers])
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다