2017-09-15 83 views
0

當我嘗試導出AVAssetExport資產時,我只在通過whatsapp收到的視頻上可能會出現以下錯誤。 我找不到工作解決方案。我也嘗試過實施代碼來修復視頻持續時間,但我沒有修復它。 錯誤是:錯誤域= NSOSStatusErrorDomain代碼= -12780 \ 「(空)\」錯誤域= NSOSStatusErrorDomain代碼= -12780 「(null)」

這裏代碼

PHCachingImageManager().requestAVAsset(forVideo: asset.phAsset!, options: nil, resultHandler: { (AVAssetRecivied, audioMix, info) in 
       let AVAssetMy = AVAssetRecivied!.normalizingMediaDuration() 
       let exportSession : AVAssetExportSession? 
       if (AVAssetMy as? AVURLAsset) != nil { 
       exportSession = AVAssetExportSession(asset: (AVAssetMy as? AVURLAsset)!, presetName: AVAssetExportPresetMediumQuality) 
       } 
       else { 
       exportSession = AVAssetExportSession(asset: (AVAssetMy as? AVComposition)!, presetName: AVAssetExportPresetMediumQuality) 
       } 
       exportSession?.outputURL = URL(fileURLWithPath: NSTemporaryDirectory() + NSUUID().uuidString + ".m4v") 
       exportSession?.outputFileType = AVFileTypeQuickTimeMovie 
       exportSession?.audioMix = audioMix 
       exportSession?.shouldOptimizeForNetworkUse = true 
       exportSession?.exportAsynchronously {() -> Void in 
        if exportSession?.status == .completed { 
        self.getFileSize(url: exportSession!.outputURL!) 
        if self.myMediaArray == nil { 
         self.myMediaArray = [["Video" : AVAsset(url: exportSession!.outputURL!)]] 
         DispatchQueue.main.async { 
          self.collectionViewImage.reloadData() 
         } 
        } else { 
         self.myMediaArray?.append(["Video" : AVAsset(url: exportSession!.outputURL!)]) 
         DispatchQueue.main.async { 
          self.collectionViewImage.reloadData() 
         } 
        }} 
       } 
      }) 

這裏是用於調整視頻

func normalizingMediaDuration() -> AVAsset? { 
    let mixComposition : AVMutableComposition = AVMutableComposition() 
    var mutableCompositionVideoTrack : [AVMutableCompositionTrack] = [] 
    var mutableCompositionAudioTrack : [AVMutableCompositionTrack] = [] 
    let totalVideoCompositionInstruction : AVMutableVideoCompositionInstruction = AVMutableVideoCompositionInstruction() 

    guard let video = tracks(withMediaType: AVMediaTypeVideo).first else { 
     return nil 
    } 

    guard let audio = tracks(withMediaType: AVMediaTypeAudio).first else { 
     return nil 
    } 

    mutableCompositionVideoTrack.append(mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)) 
    mutableCompositionAudioTrack.append(mixComposition.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)) 

    let duration = video.timeRange.duration.seconds > audio.timeRange.duration.seconds ? audio.timeRange.duration : video.timeRange.duration 

    do{ 
     try mutableCompositionVideoTrack[0].insertTimeRange(CMTimeRangeMake(kCMTimeZero,duration), of: video, at: kCMTimeZero) 
     try mutableCompositionAudioTrack[0].insertTimeRange(CMTimeRangeMake(kCMTimeZero, duration), of: audio, at: kCMTimeZero) 
    }catch{ 
     return nil 
    } 

    totalVideoCompositionInstruction.timeRange = CMTimeRangeMake(kCMTimeZero,duration) 

    return mixComposition 
} 

的持續時間的方法}

該文件是: 1)可導出 2)預設和格式兼容 3)我試圖將文件移動到文檔的導出之前4)我試圖更改文件擴展名。

+0

我只是花了一個tsi(事件),我被報告有一個錯誤的方法,不允許導出一些特定的視頻。他們歡迎替代品! – darkbit

回答

0

我遇到了同樣的問題,並得到了相同的錯誤代碼-12780。 唯一固定它的是: 發送到exportSession?.outputURL一個NSURL變量並將其作爲URL 我不知道它爲什麼起作用,我希望你會發現它也很有幫助。

相關問題