2015-08-14 7 views
0

Я пытаюсь создать AVMutableComposition и воспроизводить его с помощью AVPlayer. Это то, что я делаю.Нет звука при воспроизведении AVMutableComposition с AVPlayer

// Определить AVComposition

self.composition = [[AVMutableComposition alloc] init]; 

// Определение Мутабельного Track

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.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, он воспроизводит звук. Что я делаю не так? Застрял на этом.

ответ

1

Похоже, вы добавляете только один трек в свой 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]; 
Смежные вопросы