I need to get a (local) video\'s duration, and then get access to its individual frames as UIImage
s. So far I\'ve been using MPMoviePlayerController
fo
To get the duration:
NSURL *sourceMovieURL = [NSURL fileURLWithPath:somePath];
AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];
CMTime duration = sourceAsset.duration;
To get a 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];
You can get in swift like this
func getMediaDuration(url: NSURL!) -> Float64{
let asset : AVURLAsset = AVURLAsset(URL: url) as AVURLAsset
let duration : CMTime = asset.duration
return CMTimeGetSeconds(duration)
}
Calling setShouldAutoPlay:NO
does the trick with MPMoviePlayerController:
moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL: movieURL];
[moviePlayerController setShouldAutoplay:NO];
[moviePlayerController prepareToPlay];
Edit: I'm getting downvoted without explanation, but I'll stand by this answer. If you need to use MPMoviePlayerController
then this will prevent autoplay of the media, yet still allow you to get duration and thumbnails as per my original question.