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
for this.
First I register for MPMovieDurationAvailableNotification
events, and then call prepareToPlay
. When the event is received I note the video's duration, and then I request frames via requestThumbnailImagesAtTimes
.
This works, however the video seems to start playing even if I have not added the it to the view in any way (I can hear the audio playing in the background).
Is there any way to get a video's duration and frames without actually playing the video?
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];