IOS: получение продолжительности видео и миниатюр без воспроизведения видео
Мне нужно получить (локальную) продолжительность видео, а затем получить доступ к его отдельным кадрам как UIImage
s. До сих пор я использовал MPMoviePlayerController
для этого.
Сначала я регистрирую события MPMovieDurationAvailableNotification
, а затем вызываю prepareToPlay
. Когда событие получено, я отмечаю продолжительность видео, а затем я запрашиваю кадры через requestThumbnailImagesAtTimes
.
Это работает, однако видео, кажется, начинает воспроизводиться, даже если я не добавил его в представление каким-либо образом (я слышу звук, воспроизводимый в фоновом режиме).
Есть ли способ получить продолжительность видео и кадров без фактического воспроизведения видео?
Ответы
Ответ 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
, это предотвратит автовоспроизведение носителя, но все же позволит вам получать длительность и уменьшенные изображения в соответствии с моим исходным вопросом.