美文网首页
AVAsset 视频截图

AVAsset 视频截图

作者: reallychao | 来源:发表于2018-01-30 18:10 被阅读242次

使用AVFoundation框架可以生成视频缩略图,用到的类:

》》AVAsset:

用于获取多媒体的相关信息,如多媒体的画面和声音等。

》》AVURLAsset:

AVAsset的子类,用于根据NSURL生成AVAsset对象

》》AVAssetImageGenerator:

用于截取视频指定帧的动画

一般步骤:

1、根据视频的URLchuang见AVURLAsset对象

2、根据AVURLAsset对象创建AVAssetImageGenerator对象

3、调用AVAssetImageGenerator对象的copyCGImageAtTime:actualTime:error:来获取该视频指定时间点的视频截图

第一个参数:指定获取哪个时间点的视频截图,该参数是一个CMTime结构体:(CMTime. value/timescale = seconds)

CMTime CMTimeMake(
                int64_t value,        /*! @param value        Initializes the value field of the resulting CMTime. */
                int32_t timescale)    /*! @param timescale    Initializes the timescale field of the resulting CMTime. */
                            __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

CMTime CMTimeMakeWithSeconds(
                Float64 seconds,      
          int32_t preferredTimeScale) 
                 __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

获取CMTime相关函数:

CMTime CMTimeMake(
                int64_t value,        /*! @param value        Initializes the value field of the resulting CMTime. */
                int32_t timescale)    /*! @param timescale    Initializes the timescale field of the resulting CMTime. */
                            __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

CMTime CMTimeMakeWithSeconds(
                Float64 seconds,      
          int32_t preferredTimeScale) 
                 __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

第二个参数:获取截图的实际时间点(要用“&”传指针)

第三个参数:获取错误信息(要用“&”传指针)

视频截图函数

- (UIImage *)screenshotWithSeconds:(Float64)seconds{
    
    
    if (!_curPlayerItem) {
        return nil;
    }
    AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:self.curPlayerItem.asset];
    
    if (!generator) {
        return nil;
    }
    // 防止时间出现偏差
    generator.requestedTimeToleranceBefore = kCMTimeZero;
    generator.requestedTimeToleranceAfter = kCMTimeZero;
    CMTime time = kCMTimeZero;
    if (seconds > 0) {
        CMTimeScale timeScale = self.curPlayerItem.asset.duration.timescale;
        time = CMTimeMakeWithSeconds(seconds, timeScale);
    }
    else
    {
        time = self.curPlayerItem.currentTime;
    }
    
    CMTime actualTime;
    NSError *error;
    CGImageRef cgImage = [generator copyCGImageAtTime:time
                                           actualTime:&actualTime
                                                error:&error];
    if (!cgImage) {
        return nil;
    }
    
    UIImage *image = [UIImage imageWithCGImage:cgImage];
    CFRelease(cgImage);
    
    if (nil != error) {
        //BBAPlayerLog(@"screenshotWithSeconds:%@",error);
        return nil;
    }
    
    return image;
}

相关文章

  • AVAsset 视频截图

    使用AVFoundation框架可以生成视频缩略图,用到的类: 》》AVAsset: 用于获取多媒体的相关信息,如...

  • iOS 视频压缩

    1.获取本地视频,fromUrl为本地视频链接 AVAsset*asset = [AVAsset assetWit...

  • 视频裁剪

    AVAsset AVAsset是一个表现音视频媒体的抽象类.AVAsset对象给我们开发提供了媒体文件的访问接口....

  • 获取视频预览图

    #pragma mark - 网络视频预览- (void)getEachPic { AVAsset *myAsse...

  • OC之AVAsset

    AVAsset 用于建模同步视听媒体:如视频和声音 的抽象类。 AVAsset定义了组成资源的轨道的集合属性。使用...

  • 从视频中提取音频

    AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithStri...

  • 2018-11-29

    AVAudioFoundation(1):使用 AVAsset AVFoundation(二):核心AVAsset

  • AVPlayer视频播放之 - AVAsset

     视频播放作为现在app端不可少的一部分,系统提供框架AVKit有时不能满足我们的需求和审美,所以大多数情况下我们...

  • iOS 视频截取压缩

    Ios视频截取功能,常用到的AVFoundation下的类: ·AVURLAsset:AVAsset的子类,主要用...

  • 视频处理之压缩成mp4

    将视频文件压缩保存mp4格式 AVURLAsset *avAsset = [AVURLAsset URLAsset...

网友评论

      本文标题:AVAsset 视频截图

      本文链接:https://www.haomeiwen.com/subject/cgnczxtx.html