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 的视频帧?

想要在 AVPlayer 中播放视频时逐帧提取视频中的所有图像

MPMoviePlayer 或 AVPlayer 帧前进

javascript截取video视频第一帧作为封面方案

uni-app App和H5平台上传视频截取视频第一帧生成图片

如何截取视频的第一帧图片