Регулировка громкости проигрывателя AVPlayer

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

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

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

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

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

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]; 

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

 - (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]; } 

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

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

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

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

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

  • Передача параметров addTarget: действие: forControlEvents
  • Msgstr "wait_fences: не удалось получить ответ: 10004003"?
  • Сохранение изображения в plist
  • Как размыть сцену в SpriteKit?
  • Может ли iPhone приложение блокировать телефонные звонки?
  • Что делает @synthesize window = _window?
  • Есть ли способ указать позицию / индекс аргумента в NSString stringWithFormat?
  • Как resize изображения программно в объективе-c в iphone
  • Приложение iOS: как очистить уведомления?
  • Значение предупреждения "во время презентации!"
  • канонический способ рандомизации NSArray в Objective C
  • Давайте будем гением компьютера.