2015-08-18 31 views
0

我正在做一些视频编辑,我需要将AVMutableVideoComposition放到播放器项目中。要进入玩家项目,它需要成为AVAsset。有谁知道他们的头如何做到这一点?我无法找到如何在我查看的文档中执行此操作。谢谢如何将AVMutableVideoComposition转换为AVAsset

+0

请看这个答案:[导出AVComposition并获取本地url播放和上传视频](https://stackoverflow.com/a/46559459/2276920) – coder123

回答

5

您可以使用AVMutableComposition作为AVPlayerItem的资产,因为AVMutableCompositionAVAsset的子类。

AVMutableVideoComposition不是AVAsset的子类,而是一种在AVMutableComposition中显示您插入到AVAssetTracks中的视频的方法。

(如果您的所有影片被定位你想没有AVMutableVideoComposition的方式,那么你可能并不需要设置播放器项目的videoComposition属性)

ObjC:

AVMutableComposition *composition = ... 
AVMutableVideoComposition *videoComposition = ... 
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:composition]; 
item.videoComposition = videoComposition; 

斯威夫特:

let composition = AVMutableComposition(... 
let videoComposition = AVMutableVideoComposition(... 
let item = AVPlayerItem(asset: composition) 
item.videoComposition = videoComposition 
0

检查这 - exportPath可以保持视频

012的任何临时路径
func ConvertAvcompositionToAvasset(avComp: AVComposition, completion:@escaping (_ avasset: AVAsset) -> Void){ 
    let exporter = AVAssetExportSession(asset: avComp, presetName: AVAssetExportPresetHighestQuality) 
    let randNum:Int = Int(arc4random()) 
    let exportPath: NSString = NSTemporaryDirectory().appendingFormat("\(randNum)"+"video.mov") as NSString 
    let exportUrl: NSURL = NSURL.fileURL(withPath: exportPath as String) as NSURL 

    exporter?.outputURL = exportUrl as URL 
    exporter?.outputFileType = AVFileTypeQuickTimeMovie 
    exporter?.shouldOptimizeForNetworkUse = true 
    exporter?.exportAsynchronously(completionHandler: {() -> Void in 
     DispatchQueue.main.async(execute: {() -> Void in 
      if exporter?.status == .completed { 
       let URL: URL? = exporter?.outputURL 
       let Avasset:AVAsset = AVAsset(url: URL!) 
       completion(Avasset) 
      } 
      else if exporter?.status == .failed{ 
       print("Failed") 

      } 
     }) 
    }) 
} 
相关问题