我想在iOS设备上以慢动作显示视频。
我的视图包含一个视频(~2 秒长(和一个滑块。
用户可以逐帧移动滑块并逐步(向前和向后(浏览影片。
MPMoviePlayerController
缺乏逐帧步进的能力。
我读过关于MVAssetReader
,但我不知道如何使用它。
我没有固定的帧速率,因此它应该从视频的元数据中删除此信息。我真的需要展示每一帧。
有人可以给我一个线索吗?
AV 播放器演示 WWDC 2010 的示例代码示例代码对您的任务很有帮助
从视频中剪切缩略图在 WWDC 2010 中使用 AV 基础框架进行 AV 编辑以及有关使用示例代码编辑音频和视频的许多其他内容进行了说明
如果您有开发人员帐户(付费(,则可以在iTunes上观看视频
AVFoundation是一个非常强大的框架,但比MPMoviePlayerController需要更多的键入和理解。 我强烈推荐Dinesh的建议观看WWDC视频,查看示例代码并阅读文档。 该文档非常适合获得概念理解,但是当涉及到实际视频格式的细节时,它缺少一些细节。 为此,示例代码和实验很好。
如果你想一帧一帧地走,那么我认为AVPlayerItem stepByCount:是要走的路。
// Setup a PlayerItem and a Player
NSURL* movieURL = [NSBundle URLForResource:@"movie" withExtension:@"mov" subdirectory:@"" inBundleWithURL:[NSBundle mainBundle].bundleURL];
AVURLAsset* movieAsset = [AVURLAsset assetWithURL:movieURL];
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:movieAsset];
AVPlayer* player = [AVPlayer playerWithPlayerItem:playerItem];
// setup the layer so you can see it
AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = self.view.bounds;
[self.view.layer addSublayer:playerLayer];
// Verify our assumptions, in production code you should do something better
NSAsset(player.currentItem.canStepForward, @"Assume this format can step forward");
NSAsset(player.currentItem.canStepBackward, @"Assume this format can step backward");
[player.currentItem stepByCount:1]; // step forward a frame
[player.currentItem stepByCount:-1]; // step backward a frame