相关疑难解决方法(0)

如何将CVPixelBuffer变成UIImage?

我在从CVPixelBuffer获取UIIMage时遇到一些问题.这就是我想要的:

CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(imageDataSampleBuffer);
CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, imageDataSampleBuffer, kCMAttachmentMode_ShouldPropagate);
CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer options:(NSDictionary *)attachments];
if (attachments)
    CFRelease(attachments);
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);
if (width && height) { // test to make sure we have valid dimensions
    UIImage *image = [[UIImage alloc] initWithCIImage:ciImage];

    UIImageView *lv = [[UIImageView alloc] initWithFrame:self.view.frame];
    lv.contentMode = UIViewContentModeScaleAspectFill;
    self.lockedView = lv;
    [lv release];
    self.lockedView.image = image;
    [image release];
}
[ciImage release];
Run Code Online (Sandbox Code Playgroud)

height并且width都正确设置为相机的分辨率. image是创建但我似乎是黑色(或可能是透明的?).我不太明白问题出在哪里.任何想法,将不胜感激.

avfoundation uiimage ios

36
推荐指数
5
解决办法
3万
查看次数

iOS:AVPlayer - 获取视频当前帧的快照

我花了一整天时间,经历了很多SO答案,Apple参考文献,文档等,但都没有成功.

我想要一个简单的事情:我正在使用AVPlayer播放视频,我想暂停它并获取当前帧UIImage.而已.

我的视频是一个位于互联网上的m3u8文件,它在AVPlayerLayer没有任何问题的情况下正常播放.

我试过了什么:

  1. AVAssetImageGenerator.它不起作用,该方法copyCGImageAtTime:actualTime: error:返回null image ref.根据答案,此处 AVAssetImageGenerator不适用于流媒体视频.
  2. 拍摄玩家视图的快照.我第一次尝试renderInContext:AVPlayerLayer,但后来我意识到,这不是渲染这种"特殊"层.然后我发现了iOS 7中引入的一种新方法 - drawViewHierarchyInRect:afterScreenUpdates:它应该能够渲染特殊的图层,但没有运气,仍然可以获得带有空白黑色区域的UI快照,其中显示视频.
  3. AVPlayerItemVideoOutput.我为我添加了一个视频输出AVPlayerItem,但每当我调用hasNewPixelBufferForItemTime:它时返回NO.我想问题是再次流式传输视频,我并不孤单.
  4. AVAssetReader.我正在考虑尝试,但决定在这里找到相关问题后不要浪费时间.

所以,有没有办法得到我现在在屏幕上看到的东西的快照?我简直不敢相信.

video objective-c avfoundation ios avplayer

9
推荐指数
2
解决办法
6941
查看次数

标签 统计

avfoundation ×2

ios ×2

avplayer ×1

objective-c ×1

uiimage ×1

video ×1