gpt4 book ai didi

ios - 在 AVMutableVideoComposition 中使用 trackId

转载 作者:行者123 更新时间:2023-11-30 14:13:31 24 4
gpt4 key购买 nike

所以我正在开发这个视频编辑器项目,但在获取 trackID 时遇到了问题我搜索了我所知道的所有地方,但我所能找到的只是一些 Objective-C 代码,但我无法将其转换为 swift

我在这一行收到错误:

layer?.trackID = videoAsset?.tracksWithMediaType(AVMediaTypeVideo)

错误是

Cannot assign to the result of this expression

这是我的代码:

import UIKit
import MobileCoreServices
import AVFoundation
import AVKit

class VideoMakerViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIVideoEditorControllerDelegate {
var videoAsset: AVAsset? = nil
var videoEditor: AVMutableVideoComposition? = nil
var videoEditorInstroctions: AVVideoCompositionInstruction? = nil
var layer: AVVideoCompositionLayerInstruction? = nil


override func viewDidLoad() {
super.viewDidLoad()
}


@IBAction func chooseVideo(sender: AnyObject) {
var videoPicker = UIImagePickerController()
videoPicker.delegate = self
videoPicker.sourceType = .PhotoLibrary
videoPicker.mediaTypes = [kUTTypeMovie]
videoPicker.allowsEditing = false
presentViewController(videoPicker, animated: true, completion: nil)
}


func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
dismissViewControllerAnimated(true, completion: nil)

let url = info[UIImagePickerControllerReferenceURL] as! NSURL
let videoName = url.path!.lastPathComponent
let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String
let localPath = documentDirectory.stringByAppendingPathComponent(videoName)
println(videoName)
videoAsset = AVURLAsset(URL: url, options: nil)

videoEditorInstroctions?.backgroundColor = UIColor.blueColor().CGColor

layer?.trackID = videoAsset?.tracksWithMediaType(AVMediaTypeVideo)
videoEditor = AVMutableVideoComposition(propertiesOfAsset: videoAsset)
videoEditor?.frameDuration = CMTimeMake(60, 30)
videoEditor?.renderSize = CGSize(width: 600, height: 1000)
videoEditor?.renderScale = Float(1)

println(videoAsset?.duration)
}
}

最佳答案

首先:trackID 是只读的。为了能够为其分配任何内容,您必须使用 AVMutableVideoCompositionLayerInstruction而不是 AVVideoCompositionLayerInstruction

第二个:tracksWithMediaType返回

An array of AVAssetTrack objects of the asset that present media of mediaType.

trackID的类型为CMPersistentTrackID 。因此,您不能将其中一个分配给另一个。

但是,您可以/必须从返回数组中的任何对象中检索您正在查找的 ID:

layer?.trackID = (videoAsset?.tracksWithMediaType(AVMediaTypeVideo)[0].trackID)!

layer?.trackID = videoAsset!.tracksWithMediaType(AVMediaTypeVideo)[0].trackID

关于ios - 在 AVMutableVideoComposition 中使用 trackId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com