AVPlayer 截取视频流的当前帧

2018-06-14 14:05 更新

*在给应用截图是发现系统截图方法不能截取播放器的画面,所以需要手动截取视频当前帧的画面。

本文说明的是AVPlayer的视频流截图方法。

截取视频画面总共分三步

一、声明所需属性

  1. @interface ViewController ()  
  2. {  
  3.     AVPlayer *_player;  
  4.     AVPlayerItemVideoOutput *_videoOutPut;  
  5.       
  6. }  
  7. @end  

二、实例化

  1. //初始化输出流  
  2. _videoOutPut = [[AVPlayerItemVideoOutput alloc] init];  
  3. //初始化播放地址  
  4. AVPlayerItem *item = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"视频地址"]];  
  5. //添加输出流  
  6. [item addOutput:_videoOutPut];  
  7. //初始化播放器  
  8. _player = [[AVPlayer alloc] initWithPlayerItem:item];  
  9. //展示播放器到视图上。。。。  


三、获取关键帧画面

  1. -(void)getCurrentImage  
  2. {  
  3.     CMTime itemTime = _player.currentItem.currentTime;  
  4.     CVPixelBufferRef pixelBuffer = [_videoOutPut copyPixelBufferForItemTime:itemTime itemTimeForDisplay:nil];  
  5.     CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];  
  6.     CIContext *temporaryContext = [CIContext contextWithOptions:nil];  
  7.     CGImageRef videoImage = [temporaryContext  
  8.                              createCGImage:ciImage  
  9.                              fromRect:CGRectMake(0, 0,  
  10.                                                  CVPixelBufferGetWidth(pixelBuffer),  
  11.                                                  CVPixelBufferGetHeight(pixelBuffer))];  
  12.       
  13.     //当前帧的画面  
  14.     UIImage *currentImage = [UIImage imageWithCGImage:videoImage];  
  15.     CGImageRelease(videoImage);  
  16. }  

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号