【发布时间】:2016-05-16 13:31:37
【问题描述】:
我有一个 [AVAsset] 数组,我正在尝试将所有这些资产组合到一个资产中,以便我可以无缝播放视频(我尝试使用 AVQueuePlayer,但这不会播放资产无缝)。
以下是我到目前为止的内容,但是当我尝试播放最终作品时,它只播放第一首曲目,即使它显示它具有所有曲目并且总持续时间等于所有曲目的总和。
我是否遗漏了一个步骤,即使所有曲目似乎都在作曲中?如果 AVPlayerItem 有多个轨道,也许我需要以不同的方式处理 AVPlayer?
let playerLayer: AVPlayerLayer = AVPlayerLayer()
lazy var videoPlayer: AVPlayer = AVPlayer()
var videoClips = [AVAsset]()
let videoComposition = AVMutableComposition()
var playerItem: AVPlayerItem!
var lastTime: CMTime = kCMTimeZero
for clipIndex in videoClips {
let videoCompositionTrack = videoComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
do {
try videoCompositionTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, clipIndex.duration),
ofTrack: clipIndex.tracksWithMediaType(AVMediaTypeVideo)[0] ,
atTime: lastTime)
lastTime = CMTimeAdd(lastTime, clipIndex.duration)
} catch {
print("Failed to insert track")
}
}
print("VideoComposition Tracks: \(videoComposition.tracks.count)") // Shows multiple tracks
playerItem = AVPlayerItem(asset: videoComposition)
print("PlayerItem Duration: \(playerItem.duration.seconds)") // Shows the duration of all tracks together
print("PlayerItem Tracks: \(playerItem.tracks.count)") // Shows same number of tracks as the VideoComposition Track count
videoPlayer = AVPlayer(playerItem: playerItem)
playerLayer.player = videoPlayer
videoPlayer.volume = 0.0
videoPlayer.play() // Only plays the first track
【问题讨论】:
标签: ios swift avplayer avasset avmutablecomposition