J'ai un tableau de [AVAsset], et j'essaie de combiner tous ces assets dans un seul Asset pour pouvoir lire la vidéo de façon transparente (j'ai essayé d'utiliser AVQueuePlayer , mais cela ne joue pas les actifs de façon transparente).AVMutableComposition - Lecture uniquement de la première piste (Swift)
Voici ce que j'ai jusqu'ici, mais quand j'essaie de jouer la composition finale, elle ne joue que la première piste, même si elle montre qu'elle a toutes les pistes et que la durée totale est égale à toutes les pistes. Est-ce qu'il me manque une étape, même s'il semble que toutes les pistes sont dans la composition? Peut-être que je dois gérer l'AVPlayer différemment si l'AVPlayerItem a plusieurs pistes?
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
Cest pas correct, vous pouvez jouer plusieurs pistes si vous créez un 'AVMutableVideoComposition', et définir l'opacité de la piste à 0 (sur la fin de piste) dans layerInstruction de cette piste. – Tiko