2011-07-08 15 views
10

por lo que parece que los únicos valores que realmente funcionan son 0.0, 0.5, 1.0 y 2.0 ...La propiedad de tasa de AVPlayer no funciona?

intenté configurarlo en 0.25 ya que quiero que juegue a 1/4 de la velocidad natural, pero jugó a la mitad de la velocidad natural en su lugar. ¿Alguien puede confirmar esto?

+0

duplicado posible de [la reproducción desigual de AVPlayer en la Aplicación de la tasa mayor que 2x] (http://stackoverflow.com/questions/40506059/jerky-playback-from-avplayer-on-applying-rate-greater- than-2x) –

Respuesta

15

confirmada. De hecho, tenía un boleto con Apple DTS abierto para este problema y un error archivado. Los únicos valores compatibles son 0.50, 0.67, 0.80, 1.0, 1.25, 1.50 y 2.0. Todas las demás configuraciones se redondean al valor más cercano.

+0

¿Alguna respuesta al informe de errores? –

+3

Los valores negativos también son compatibles, por ejemplo, puede usar -2.0 para buscar hacia atrás. –

+1

¡deseo manzana tenía esto allí documentos! perdió un par de horas tratando de resolver lo que estaba pasando. – DogCoffee

0

No funciona bien para mí (xcode 4.2) en ipad 2 ios 5. Utilicé el AVPlayerDemo de los recursos de desarrollo y modifiqué la propiedad de velocidad con un control deslizante y es muy suave, definitivamente no salta. Aunque el comportamiento por debajo de 0.2 es impar. tal vez la tasa no sea lineal cerca de los valores extremos, pero definitivamente suave. desde 0.2 hasta 2. Estoy usando videos que capturé con el dispositivo, eso podría marcar la diferencia.

adiós,

Jean

+1

Estoy usando xcode 4.3 ipad ios 5 y no tienen efecto. 0.5

4

Encontré que los valores más pequeños son de hecho compatibles, pero todas las pistas en el AVPlayerItem tienen que soportar la velocidad. Sin embargo, Apple no proporciona una propiedad en pistas individuales que indiquen qué tarifas son compatibles, solo existe la propiedad canPlaySlowForward en AVPlayerItem.

Lo que encontré es que los AVPlayerItems con una pista de audio no pueden reproducirse a velocidades inferiores a 0.5. Sin embargo, si solo hay una pista de video, la tasa puede tener un pequeño valor arbitrario como 0.01. Trataré de escribir una categoría que verifique sobre la marcha qué valores son compatibles y deshabilitar las pistas no compatibles si es necesario.

br Denis

ACTUALIZACIÓN

me escribió una función que se puede llamar cada vez que desee establecer la velocidad de vídeo por debajo de 0,5. Activa/desactiva todas las pistas de audio.

- (void)enableAudioTracks:(BOOL)enable inPlayerItem:(AVPlayerItem*)playerItem 
{ 
    for (AVPlayerItemTrack *track in playerItem.tracks) 
    { 
     if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio]) 
     { 
      track.enabled = enable; 
     } 
    } 
} 
+1

Tuve la oportunidad de probar el código ... el tiempo para votar esta vez como la RESPUESTA COMPLETA a la pregunta. Esto funciona como se describe cuando desactivo el audio en un .mov que incluía una pista de audio, como se probó en XCode 6, iOS 8, iPhone 5. NOTA: en iOS 6 todavía se reproducía en el mínimo de 0.5. –

19

La restricción de la velocidad de reproducción parece deberse a la corrección de tono, que ahora se puede configurar en iOS 7 o posterior.

// This prevents the play rate from going below 1/2. 
playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmLowQualityZeroLatency; 

Esa parece ser la configuración por defecto:

baja calidad y el algoritmo de paso de cómputo intensivo muy bajo. Adecuado para efectos rápidos de avance y rebobinado, así como para voz de baja calidad. La velocidad se ajusta a {0.5, 0.666667, 0.8, 1.0, 1.25, 1.5, 2.0}.

Las otras tres configuraciones de algoritmo le permiten variar la velocidad de reproducción a 1/32. Por ejemplo, AVAudioTimePitchAlgorithmVarispeed desactiva la corrección de tono.

// Enable play rates down to 1/32. 
playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmVarispeed; 
+0

¿Puedo usar estos, si mi AVPlayer está dentro de un AVPlayerViewController? – Nil

+0

Creo que sí. Puede pedir un 'AVPlayerViewController' para su' player'. Luego puede preguntar al 'jugador' por su' currentItem'. Es el 'AVPlayerItem' que tiene una propiedad' audioTimePitchAlgorithm'. – otto

+0

ok, intentaré eso, hasta entonces podrías echar un vistazo a mi pregunta aquí: https://stackoverflow.com/questions/47514282/ios-avplayer-cant-play-240-fps-video – Nil

1

Estoy de acuerdo con @otto, hola respuesta resuelto mi problema.

/* 
AVAudioProcessingSettings.h 


@abstract  Values for time pitch algorithm 

@constant  AVAudioTimePitchAlgorithmLowQualityZeroLatency 
      Low quality, very inexpensive. Suitable for brief fast-forward/rewind effects, low quality voice. 
      Rate snapped to {0.5, 0.666667, 0.8, 1.0, 1.25, 1.5, 2.0}. 

@constant  AVAudioTimePitchAlgorithmTimeDomain 
      Modest quality, less expensive. Suitable for voice. 
      Variable rate from 1/32 to 32. 

@constant  AVAudioTimePitchAlgorithmSpectral 
      Highest quality, most computationally expensive. Suitable for music. 
      Variable rate from 1/32 to 32. 

@constant  AVAudioTimePitchAlgorithmVarispeed 
      High quality, no pitch correction. Pitch varies with rate. 
      Variable rate from 1/32 to 32. 
*/ 

AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmLowQualityZeroLatency NS_AVAILABLE_IOS(7_0); 
AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmTimeDomain NS_AVAILABLE(10_9, 7_0); 
AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmSpectral NS_AVAILABLE(10_9, 7_0); 
AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmVarispeed NS_AVAILABLE(10_9, 7_0); 
Cuestiones relacionadas