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

IOS: получение продолжительности видео и миниатюр без воспроизведения видео

Мне нужно получить (локальную) продолжительность видео, а затем получить доступ к его отдельным кадрам как UIImage s. До сих пор я использовал MPMoviePlayerController для этого.

Сначала я регистрирую события MPMovieDurationAvailableNotification, а затем вызываю prepareToPlay. Когда событие получено, я отмечаю продолжительность видео, а затем я запрашиваю кадры через requestThumbnailImagesAtTimes.

Это работает, однако видео, кажется, начинает воспроизводиться, даже если я не добавил его в представление каким-либо образом (я слышу звук, воспроизводимый в фоновом режиме).

Есть ли способ получить продолжительность видео и кадров без фактического воспроизведения видео?

4b9b3361

Ответ 1

Чтобы получить продолжительность:

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

Чтобы получить рамку:

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

Ответ 2

Вы можете попасть в быстрый, как этот

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

Ответ 3

Вызов setShouldAutoPlay:NO делает трюк с MPMoviePlayerController:

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

Изменить: я получаю нисходящее без объяснений, но я буду отвечать за этот ответ. Если вам нужно использовать MPMoviePlayerController, это предотвратит автовоспроизведение носителя, но все же позволит вам получать длительность и уменьшенные изображения в соответствии с моим исходным вопросом.