Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

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