objective c - Busque una determinada posición en AVPlayer justo después de cargar el recurso
avplayer windows (1)
Esto funciona: tengo un AVPlayer
que reproduce un video justo después de cargarlo. Y esto funciona bien.
Esto no hace
En lugar de comenzar el video al principio, quiero reproducirlo en una posición determinada. Así que espero hasta que el activo esté listo para jugar usando KVO:
BOOL isReadyToSeek = (self.playerItem.status == AVPlayerStatusReadyToPlay)
Y luego buscar el tiempo dado.
[playerItem seekToTime:timeInTheMiddleOfTheVideo completionHandler:myHandler];
Pero el jugador siempre comenzará al principio del video en la búsqueda inicial.
Actualizar Probé un dispatch_after con unos segundos pero eso tampoco funciona. Funciona después de la reproducción pero nunca inicialmente.
Cuando observo self.player.currentItem.duration
, sigo obteniendo 0
como value
y timescale
.
Un par de cosas que pueden ayudarte:
Cuando verifico si el jugador está listo para jugar, verifico tanto el reproductor como el elemento actual del jugador.
if(self.player.status == AVPlayerStatusReadyToPlay && self.player.currentItem.status == AVPlayerItemStatusReadyToPlay) { [self.player play]; }
Es posible que si busca, por ejemplo, 15 segundos, puede comenzar desde el comienzo del video, si esa es la ubicación del fotograma clave más cercano. Para forzar al jugador a buscar la ubicación exacta (nota: esto tomará varios segundos), haz esto:
Float64 seconds = 500.0f; CMTime targetTime = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC); [self.player seekToTime:targetTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
O puede buscar el fotograma clave explícitamente antes / después del punto especificado especificando uno de los argumentos como infinito:
[self.player seekToTime:targetTime toleranceBefore:kCMTimePositiveInfinity toleranceAfter:kCMTimeZero];