Невозможно экспортировать видео с помощью SCAssetExportSession - PullRequest
0 голосов
/ 22 мая 2019

Я использовал 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)!)
        }
    }
}
...