Я использовал screcorder
для захвата видео, и я использую SCAssetExportSession
для экспорта видео.Я могу экспортировать видео только в первый раз, после этого я получаю следующую ошибку:
some: Error Domain = AVFoundationErrorDomain Code = -11800 «Операция не может быть завершена» UserInfo = {NSLocalizedFailureReason= Произошла неизвестная ошибка (-12138), NSLocalizedDescription = Операция не может быть завершена, NSUnderlyingError = 0x283903690 {Ошибка домена = NSOSStatusErrorDomain Code = -12138 "(null)"}}
Я проверилнекоторые ссылки через stackoverflow, но ничего из этого не работает для меня, я попробовал следующие вещи также
self.session.deinitialize()
self.exportSession = SCAssetExportSession()
Я использовал следующий код:
func exportSessionVideo() {
self.Loader_show()
let videoName = randomString(length: 5) + ".mp4"
let exportedVideoURL = (applicationDocumentsDirectory()?.appendingPathComponent(videoName))!
exportSession = SCAssetExportSession()
exportSession = SCAssetExportSession(asset: session.assetRepresentingSegments())
exportSession.videoConfiguration.preset = SCPresetHighestQuality
exportSession.audioConfiguration.preset = SCPresetHighestQuality
exportSession.videoConfiguration.maxFrameRate = 35
exportSession.outputUrl = session.outputUrl
exportSession.outputFileType = AVFileType.mp4.rawValue
exportSession.delegate = self
exportSession.contextType = .auto
// let audioMix: AVMutableAudioMix = AVMutableAudioMix()
// var audioMixParam: [AVMutableAudioMixInputParameters] = []
//
// let aAudioAssetTrack: AVAssetTrack = session.assetRepresentingSegments().tracks.first!
// let videoParam: AVMutableAudioMixInputParameters = AVMutableAudioMixInputParameters(track: aAudioAssetTrack)
// videoParam.trackID = aAudioAssetTrack.trackID
//
// let videoVolume : Float = 1
//
// videoParam.setVolume(videoVolume, at: kCMTimeZero)
//
// videoParam.setVolumeRamp(fromStartVolume: videoVolume, toEndVolume: videoVolume, timeRange: aAudioAssetTrack.timeRange)
//
// audioMixParam.append(videoParam)
// audioMix.inputParameters = audioMixParam
// exportSession.audioConfiguration.audioMix = audioMix
exportSession.exportAsynchronously {
self.Loader_Hide()
let error = self.exportSession.error
if (self.exportSession.cancelled) {
showMessage("Export was cancelled")
} else if error == nil {
print("url: \(self.exportSession.outputUrl?.absoluteString ?? "nil url")")
let assetURL = self.exportSession.outputUrl
self.recorder.session = nil
self.recorder.previewView = nil
self.exportSession = SCAssetExportSession()
self.session.deinitialize()
self.recorder.session?.deinitialize()
self.dismiss(animated: true, completion: {
DispatchQueue.main.async(execute: {
let vc = loadVC(strStoryboardId: SB_CAMERA, strVCId: "CreatePostVC") as! CreatePostVC
vc.objEnum_PostType = .Video
vc.strPostURL = assetURL!.absoluteString
APP_DELEGATE.appNavigation?.present(vc, animated: true, completion: nil)
})
})
} else {
showMessage((error?.localizedDescription)!)
}
}
}