需要确保AVMutableComposition中的所有轨道都配置正确并且时长相匹配。另外,需要使用AVPlayerItem将AVMutableComposition封装成AVPlayer可用的格式。以下是示例代码:
// 创建可变合成对象
let composition = AVMutableComposition()
// 创建视频轨道
let videoTrack = composition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid)
// 将视频素材插入轨道
do {
try videoTrack?.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration), of: videoAsset.tracks(withMediaType: AVMediaType.video)[0], at: CMTime.zero)
} catch {
print("插入视频轨道错误:\(error)")
}
// 创建音频轨道
let audioTrack = composition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: kCMPersistentTrackID_Invalid)
// 将音频素材插入轨道
do {
try audioTrack?.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration), of: videoAsset.tracks(withMediaType: AVMediaType.audio)[0], at: CMTime.zero)
} catch {
print("插入音频轨道错误:\(error)")
}
// 创建AVPlayerItem
let playerItem = AVPlayerItem(asset: composition)
// 创建AVPlayer
let player = AVPlayer(playerItem: playerItem)
// 将AVPlayer加入AVPlayerLayer中显示
let playerLayer = AVPlayerLayer(player: player)
self.videoPlayerView.layer.addSublayer(playerLayer)
// 播放视频
player.play()