У меня есть массив [AVAsset], и я пытаюсь объединить все эти активы в один актив, чтобы я мог воспроизводить видео без проблем (я попытался использовать AVQueuePlayer , но это не обеспечивает бесперебойную активацию активов).AVMutableComposition - только воспроизведение первого трека (Swift)
Ниже приведено то, что у меня есть до сих пор, но когда я пытаюсь сыграть финальную композицию, он воспроизводит только первый трек, хотя он показывает, что у него есть все треки, а общая продолжительность равна всем трекам вместе.
Я пропустил шаг, хотя кажется, что все композиции находятся в композиции? Возможно, мне нужно обрабатывать AVPlayer по-разному, если AVPlayerItem имеет несколько треков?
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
То не правильно, Вы можете играть несколько треков, если Вы создаете 'AVMutableVideoComposition' и установите непрозрачность пути к 0 (на конец дорожки) в layerInstruction этого трека. – Tiko