iOS: obtenga duración de video y miniaturas sin reproducir video

Necesito get la duración de un video (local) y luego tener acceso a sus frameworks individuales como UIImage s. Hasta ahora he estado usando MPMoviePlayerController para esto.

Primero me logging para los events MPMovieDurationAvailableNotification y luego llamo prepareToPlay . Cuando se recibe el evento, observo la duración del video y luego solicito cuadros a través de requestThumbnailImagesAtTimes .

Esto funciona, pero parece que el video comienza a reproducirse incluso si no lo agregué a la vista de ninguna manera (puedo escuchar el audio que se reproduce en segundo plano).

¿Hay alguna forma de get la duración y los cuadros de un video sin reproducir el video?

Para get la duración:

 NSURL *sourceMovieURL = [NSURL fileURLWithPath:somePath]; AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil]; CMTime duration = sourceAsset.duration; 

Para get un framegrab:

 AVAssetImageGenerator* generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:destinationAsset]; //Get the 1st frame 3 seconds in int frameTimeStart = 3; int frameLocation = 1; //Snatch a frame CGImageRef frameRef = [generator copyCGImageAtTime:CMTimeMake(frameTimeStart,frameLocation) actualTime:nil error:nil]; 

Puedes entrar rápido así

 func getMediaDuration(url: NSURL!) -> Float64{ let asset : AVURLAsset = AVURLAsset(URL: url) as AVURLAsset let duration : CMTime = asset.duration return CMTimeGetSeconds(duration) } 

Llamar a setShouldAutoPlay:NO hace el truco con MPMoviePlayerController:

  moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL: movieURL]; [moviePlayerController setShouldAutoplay:NO]; [moviePlayerController prepareToPlay]; 

Editar: Estoy recibiendo una baja sin explicación, pero mantendré esta respuesta. Si necesita utilizar MPMoviePlayerController , esto evitará la reproducción automática de los medios, pero aún le permitirá get duración y miniaturas según mi pregunta original.