AVPlayer 截取視頻流的當(dāng)前幀

2018-06-14 14:05 更新

*在給應(yīng)用截圖是發(fā)現(xiàn)系統(tǒng)截圖方法不能截取播放器的畫面,所以需要手動截取視頻當(dāng)前幀的畫面。

本文說明的是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. //展示播放器到視圖上。。。。  


三、獲取關(guān)鍵幀畫面

  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.     //當(dāng)前幀的畫面  
  14.     UIImage *currentImage = [UIImage imageWithCGImage:videoImage];  
  15.     CGImageRelease(videoImage);  
  16. }  

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號