我需要获取(本地)视频的持续时间,然后以UIImage
s的形式访问其各个帧。到目前为止,我一直在使用MPMoviePlayerController
。
首先,我注册MPMovieDurationAvailableNotification
个事件,然后致电prepareToPlay
。收到事件后,我会记录视频的持续时间,然后通过requestThumbnailImagesAtTimes
请求帧。
这是有效的,但即使我没有以任何方式将视频添加到视图中,视频似乎也开始播放(我可以听到后台播放的音频)。
有没有办法在没有实际播放视频的情况下获取视频的持续时间和帧数?
答案 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
,则会阻止媒体自动播放,但仍允许您根据原始问题获取持续时间和缩略图。