Ios 使用AVPlayer播放AVMutableComposition时没有声音

Ios 使用AVPlayer播放AVMutableComposition时没有声音,ios,video,avfoundation,avplayer,avmutablecomposition,Ios,Video,Avfoundation,Avplayer,Avmutablecomposition,我正在尝试创建一个AVMutableComposition,并使用AVPlayer进行播放。这就是我正在做的 //定义AVM的组成 self.composition = [[AVMutableComposition alloc] init]; self.playerItem = [[AVPlayerItem alloc] initWithAsset:self.composition]; //定义可变轨迹 self.mainVideoTrack = [self.composition addM

我正在尝试创建一个AVMutableComposition,并使用AVPlayer进行播放。这就是我正在做的

//定义AVM的组成

self.composition = [[AVMutableComposition alloc] init];
self.playerItem = [[AVPlayerItem alloc] initWithAsset:self.composition];
//定义可变轨迹

self.mainVideoTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
//定义资产

AVAsset *asset = [AVAsset assetWithURL:url];
//在轨迹中插入资源

[self.mainVideoTrack insertTimeRange:CMTimeRangeFromTimeToTime(CMTimeMake(0,1000),CMTimeMake(asset.duration*1000,1000)) ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:[self startingTimeForSegment:videoSegment] error:&error];
//使用合成定义播放器项

self.composition = [[AVMutableComposition alloc] init];
self.playerItem = [[AVPlayerItem alloc] initWithAsset:self.composition];
//定义播放器、播放器层并添加层

self.avPlayer = [[AVPlayer alloc]initWithPlayerItem:self.playerItem];
self.layerVideo = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
self.layerVideo.frame = self.previewContainer.bounds;
[self.previewContainer.layer addSublayer:self.layerVideo];

但是我在播放器层听不到声音。如果我直接使用资产初始化playeritem,而不使用AVMutableComposition,它将播放声音。我做错了什么?坚持这一点。

看起来您只是在AVMUTABLE合成中添加了一首曲目。您还需要从资源中添加音频曲目。这与添加视频曲目的方法完全相同

self.mainAudioTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
然后,您可以从资产中插入音频曲目。这是假设您希望您的音频在视频开始的同一点开始

[self.mainAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration) ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:[self startingTimeForSegment:audio] error:&error];

看起来您只是在AVMutableComposition中添加了一个曲目。您还需要从资源中添加音频曲目。这与添加视频曲目的方法完全相同

self.mainAudioTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
然后,您可以从资产中插入音频曲目。这是假设您希望您的音频在视频开始的同一点开始

[self.mainAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration) ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:[self startingTimeForSegment:audio] error:&error];