Регулировка громкости воспроизводимого AVPlayer - PullRequest
18 голосов
/ 17 июля 2010

Единственный способ получения изменения громкости на воспроизводимых в данный момент элементах AVPlayer - следовать этому процессу;

  • Разгрузить актив воспроизводимого в данный момент AVPlayerItem
  • Захватить текущее время воспроизведения для этогоAVPlayerItem
  • Загрузите ресурс в новый AVPlayerItem
  • Замените текущий AVPlayerItem новым
  • Подождите, пока текущий элемент изменится на AVPlayer
  • ПодготовкаВаш AudioMix и искать предыдущее время воспроизведения

Я где-то пропустил базовый принцип или он должен быть настолько запутанным, чтобы просто управлять уровнями громкости?

Я не могу использовать AVAudioPlayer, потому чтоМне нужно загрузить треки iTunes в плеер.

Ответы [ 4 ]

21 голосов
/ 30 мая 2011

Вы можете изменить громкость во время воспроизведения, используя метод, описанный здесь:

http://developer.apple.com/library/ios/#qa/qa1716/_index.html

Хотя текст статьи, кажется, говорит о том, что его можно использовать только для отключения звука, на самом деле вы можете установить громкость на что угодно, и вы можете установить ее после воспроизведения звука. Например, если предположить, что ваш экземпляр AVAsset называется «актив», ваш экземпляр AVPlayerItem называется «playerItem», а том, который вы хотите установить, называется «том», то следующий код должен делать то, что вы хотите:

NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];

NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
  AVMutableAudioMixInputParameters *audioInputParams = 
    [AVMutableAudioMixInputParameters audioMixInputParameters];
  [audioInputParams setVolume:volume atTime:kCMTimeZero];
  [audioInputParams setTrackID:[track trackID]];
  [allAudioParams addObject:audioInputParams];
}

AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:allAudioParams];

[playerItem setAudioMix:audioMix];
4 голосов
/ 19 ноября 2010

Вы пытались просто подготовить AVMutableAudioMix и установить его на AVPlayerItem, пока он все еще играет?Вы должны иметь возможность запросить AVPlayer для его currentItem, который может предоставить его треки, на которые должен ссылаться AVMutableAudioMixInputParameters для AVMutableAudioMix.Времена, которые вы указываете для смеси, относятся к тому времени, когда смесь применяется.

2 голосов
/ 20 августа 2013
- (IBAction)sliderAction:(id)sender {
NSLog(@"slider :%f ", self.mixerSlider.value);

NSArray *audioTracks = [self.videoHandler.videoAsset tracksWithMediaType:AVMediaTypeAudio];

// Mute all the audio tracks
NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
    AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters];
    [audioInputParams setVolume:self.mixerSlider.value atTime:kCMTimeZero];
    [audioInputParams setTrackID:[track trackID]];
    [allAudioParams addObject:audioInputParams];
}
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:allAudioParams];

[[self.mPlayer currentItem] setAudioMix:audioMix]; }

Этот метод вызывается измененным значением ползунка. И вы можете позвонить во время воспроизведения видео.

0 голосов
/ 15 декабря 2017

Обратите внимание, что метод на основе AVMutableAudioMix, описанный в исходном вопросе (и нескольких ответах) только , работает с файловыми активами, а не с потоковым мультимедиа.

Это подробно описано вдокумент, написанный Apple, здесь:

https://developer.apple.com/library/content/qa/qa1716/_index.html

Когда я попытался сделать это с потоковым аудио, я не получил никаких треков, возвращенных методом tracks(withMediaType:) AVAsset (Swift).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...