objective guide framework developing developer desarrollador apis iphone objective-c ios4

iphone - guide - Ajuste del volumen de un reproductor AVP



objective c documentation (4)

El único método para obtener un cambio de volumen en los elementos de AVPlayer que se están reproduciendo actualmente es seguir este proceso;

  • Descargar el activo de AVPlayerItem que se está reproduciendo.
  • Toma el tiempo de reproducción actual para ese AVPlayerItem
  • Cargue el activo en un nuevo AVPlayerItem
  • Reemplace el AVPlayerItem actual por el nuevo
  • Espere a que el elemento actual cambie en AVPlayer
  • Prepara tu AudioMix y busca el tiempo de reproducción anterior

¿Me he perdido un principio básico en algún lugar o está destinado a ser tan complicado para simplemente administrar los niveles de volumen?

No puedo usar un AVAudioPlayer porque necesito cargar pistas de iTunes en el reproductor.


¿Ha intentado simplemente preparar un AVMutableAudioMix y configurarlo en AVPlayerItem mientras aún se está reproduciendo? Debería poder pedirle a AVPlayer su elemento actual, que puede proporcionar sus pistas a las que debe hacer referencia AVMutableAudioMixInputParameters para AVMutableAudioMix. Los tiempos que suministra para la mezcla son relativos a cuando se aplica la mezcla.


Puedes cambiar el volumen mientras juegas usando el método descrito aquí:

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

Si bien el texto del artículo parece sugerir que solo se puede utilizar para silenciar el audio, realmente puede ajustar el volumen a cualquier cosa que desee, y puede configurarlo después de que el audio se esté reproduciendo. Por ejemplo, asumiendo que su instancia de AVAsset se llama "activo", su instancia de AVPlayerItem se llama "playerItem", y el volumen que desea configurar se llama "volumen", el siguiente código debe hacer lo que quiera:

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


Tenga en cuenta que el método basado en AVMutableAudioMix descrito en la pregunta original (y varias respuestas) solo funciona con activos basados ​​en archivos, no con medios de transmisión.

Esto se detalla en un documento escrito por Apple, aquí:

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

Cuando intenté hacer esto con la transmisión de audio, no recibí ninguna pista devuelta por las tracks(withMediaType:) método tracks(withMediaType:) (Swift).


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

Este método es llamado por el valor del control deslizante cambiado. Y puedes llamarlo mientras se reproduce el video.