iOS逐帧向前/向后播放video

我想用慢动作在iOS设备上显示video。

我的视图包含一个video(约2秒长)和一个滑块。

用户可以逐个移动滑块并逐步(向前和向后)通过电影。

MPMoviePlayerController缺乏逐帧逐帧的能力。

我读了关于MVAssetReader ,但我没有具体的想法如何使用这个。

我没有固定的帧率,所以它应该从video的元数据中取出这些信息。 我真的需要展示每一帧。

有人能给我一个线索吗?

AV Player演示WWDC 2010示例代码的示例代码可以帮助您完成任务

从video剪切缩略图在WWDC 2010video编辑中使用AV Foundation Framework进行AV编辑以及使用示例代码编辑audio和video的许多其他内容

如果你有开发者帐户(付费),那么你可以在iTunes上观看video

AVFoundation是一个非常强大的框架,但需要比MPMoviePlayerController更多的键入和理解才能使用。 我强烈build议Dineshbuild议观看WWDCvideo,查看示例代码并阅读文档。 这个文档对于理解概念是相当有用的,但是在实际video格式的细节方面却缺乏一些细节。 为此,示例代码和实验是好的。

如果你想逐帧浏览,那么我认为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