iOS:在不播放视频的情况下获取视频时长和缩略图

时间:2013-02-07 01:53:40

标签: ios ios6

我需要获取(本地)视频的持续时间,然后以UIImage s的形式访问其各个帧。到目前为止,我一直在使用MPMoviePlayerController

首先,我注册MPMovieDurationAvailableNotification个事件,然后致电prepareToPlay。收到事件后,我会记录视频的持续时间,然后通过requestThumbnailImagesAtTimes请求帧。

这是有效的,但即使我没有以任何方式将视频添加到视图中,视频似乎也开始播放(我可以听到后台播放的音频)。

有没有办法在没有实际播放视频的情况下获取视频的持续时间和帧数?

3 个答案:

答案 0 :(得分:37)

获得持续时间:

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

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

答案 1 :(得分:8)

你可以像这样进入 swift

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

答案 2 :(得分:6)

使用MPMoviePlayerController调用setShouldAutoPlay:NO可以解决问题:

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

编辑:我没有解释就被投票,但我会坚持这个答案。如果您需要使用MPMoviePlayerController,则会阻止媒体自动播放,但仍允许您根据原始问题获取持续时间和缩略图。