AVPlayer 截取视频流的当前帧
Posted 吴彦祖666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AVPlayer 截取视频流的当前帧相关的知识,希望对你有一定的参考价值。
*在给应用截图是发现系统截图方法不能截取播放器的画面,所以需要手动截取视频当前帧的画面。
本文说明的是AVPlayer的视频流截图方法。
截取视频画面总共分三步
一、声明所需属性
@interface ViewController ()
AVPlayer *_player;
AVPlayerItemVideoOutput *_videoOutPut;
@end
二、实例化
//初始化输出流
_videoOutPut = [[AVPlayerItemVideoOutput alloc] init];
//初始化播放地址
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"视频地址"]];
//添加输出流
[item addOutput:_videoOutPut];
//初始化播放器
_player = [[AVPlayer alloc] initWithPlayerItem:item];
//展示播放器到视图上。。。。
三、获取关键帧画面
-(void)getCurrentImage
CMTime itemTime = _player.currentItem.currentTime;
CVPixelBufferRef pixelBuffer = [_videoOutPut copyPixelBufferForItemTime:itemTime itemTimeForDisplay:nil];
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIContext *temporaryContext = [CIContext contextWithOptions:nil];
CGImageRef videoImage = [temporaryContext
createCGImage:ciImage
fromRect:CGRectMake(0, 0,
CVPixelBufferGetWidth(pixelBuffer),
CVPixelBufferGetHeight(pixelBuffer))];
//当前帧的画面
UIImage *currentImage = [UIImage imageWithCGImage:videoImage];
CGImageRelease(videoImage);
以上是关于AVPlayer 截取视频流的当前帧的主要内容,如果未能解决你的问题,请参考以下文章
想要在 AVPlayer 中播放视频时逐帧提取视频中的所有图像