uiimage - 从附加到AVPlayer的CALayer获取UIImage(从视频播放中提取帧)

标签 uiimage calayer avplayer

我用 AVPlayer 播放视频。工作正常。

现在我想从播放的视频中获取UIImage(当我暂时按下按钮时)。

附加到我的AVPlayer有一个CALayer,用于在我的UIView上显示视频。 我的想法是在视频播放期间从 CALayer 获取 UIImage

我用另一个问题的代码来做到这一点:

UIImage from CALayer - iPhone SDK

但是我的 UIImage 是空的。分辨率很好,但它是全白的!!!

视频似乎没有写入我的 CALayer 的内容。

有人可以帮助我吗? 谢谢

最佳答案

我无法让 Meet 的解决方案为我所用,但它让我朝着正确的方向思考。

下面是我最终在项目中使用的代码。 screenshotFromPlayer:maximumSize: 方法接受一个用于截取屏幕截图的 AVPlayer 实例,以及一个作为返回图像最大值的 CGSize尺寸。

- (UIImage *)screenshotFromPlayer:(AVPlayer *)player maximumSize:(CGSize)maxSize {

    CMTime actualTime;
    NSError *error;

    AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:player.currentItem.asset];

    // Setting a maximum size is not necessary for this code to 
    // successfully get a screenshot, but it was useful for my project.
    generator.maximumSize = maxSize;

    CGImageRef cgIm = [generator copyCGImageAtTime:player.currentTime 
                                        actualTime:&actualTime 
                                             error:&error];
    UIImage *image = [UIImage imageWithCGImage:cgIm];
    CFRelease(cgIm);

    if (nil != error) {
        NSLog(@"Error making screenshot: %@", [error localizedDescription]);
        NSLog(@"Actual screenshot time: %f Requested screenshot time: %f", CMTimeGetSeconds(actualTime),
          CMTimeGetSeconds(self.recordPlayer.currentTime));
        return nil;
    }

    return image;
}

另请注意,可以使用方法 generateCGImagesAsynchronouslyForTimes:completionHandler: 而不是 copyCGImageAtTime:actualTime:error: (在 AVAssetImageGenerator 实例上) ) 异步执行图像生成。

此代码示例在 AVPlayercurrentTime 生成屏幕截图,但也可以使用任何时间。

关于uiimage - 从附加到AVPlayer的CALayer获取UIImage(从视频播放中提取帧),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294996/

相关文章:

swift - 如何在自定义 CALayer 子类的重写绘图函数中在 macOS 上绘制字符串?

ios - 表格 View 单元格中的阴影层越界

ios - MPMoviePlayerController 只想要视频,没有音频

swift - 为 AVPlayer 视频添加字幕

objective-c - AVPlayer类事件

iphone - 如何将 x 个 UIImages 连接在一起?

ios - 如何使用 AWS iOS SDK v2 将 UIImage 上传到 S3

iphone - 如何在 iPhone 上的新 UIImage 上渲染径向渐变

swift - 将数据从自定义 UIView 传递到主 VC

For循环中的iOS 7 CA层旋转