- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Cocoa 应用程序,旨在从 USB 显微镜捕获静态图像,然后在将它们保存到图像文件之前对其进行一些后处理。目前,我试图从传递给我的 completionHandler
block 的 CMSampleBufferRef
获取到 NSImage
或我可以操作的其他表示形式并使用熟悉的 Cocoa API 进行保存。
我在 AVFoundation 文档中找到了函数 imageFromSampleBuffer()
,该函数旨在将 CMSampleBuffer
转换为 UIImage
(叹气),并且对其进行适当修改以返回 NSImage
。但在这种情况下它不起作用,因为对 CMSampleBufferGetImageBuffer()
的调用返回 nil
。
这是一条日志,显示传递给我的完成 block 的 CMSampleBuffer
:
2012-01-21 19:38:36.293 LabCam[1402:cb0f] CMSampleBuffer 0x100335390 retainCount: 1 allocator: 0x7fff8c78620c
invalid = NO
dataReady = YES
makeDataReadyCallback = 0x0
makeDataReadyRefcon = 0x0
buffer-level attachments:
com.apple.cmio.buffer_attachment.discontinuity_flags(P) = 0
com.apple.cmio.buffer_attachment.hosttime(P) = 79631546824089
com.apple.cmio.buffer_attachment.sequence_number(P) = 42
formatDescription = <CMVideoFormatDescription 0x100335220 [0x7fff782fff40]> {
mediaType:'vide'
mediaSubType:'jpeg'
mediaSpecific: {
codecType: 'jpeg' dimensions: 640 x 480
}
extensions: {<CFBasicHash 0x100335160 [0x7fff782fff40]>{type = immutable dict, count = 5,
entries =>
1 : <CFString 0x7fff773dff48 [0x7fff782fff40]>{contents = "Version"} = <CFNumber 0x183 [0x7fff782fff40]>{value = +1, type = kCFNumberSInt32Type}
2 : <CFString 0x7fff773dff68 [0x7fff782fff40]>{contents = "RevisionLevel"} = <CFNumber 0x183 [0x7fff782fff40]>{value = +1, type = kCFNumberSInt32Type}
3 : <CFString 0x7fff7781ab08 [0x7fff782fff40]>{contents = "CVFieldCount"} = <CFNumber 0x183 [0x7fff782fff40]>{value = +1, type = kCFNumberSInt32Type}
4 : <CFString 0x7fff773dfdc8 [0x7fff782fff40]>{contents = "FormatName"} = <CFString 0x7fff76d35fb0 [0x7fff782fff40]>{contents = Photo - JPEG"}
5 : <CFString 0x7fff773dff88 [0x7fff782fff40]>{contents = "Vendor"} = <CFString 0x7fff773dffa8 [0x7fff782fff40]>{contents = "appl"}
}
}
}
sbufToTrackReadiness = 0x0
numSamples = 1
sampleTimingArray[1] = {
{PTS = {2388943236/30000 = 79631.441, rounded}, DTS = {INVALID}, duration = {3698/30000 = 0.123}},
}
sampleSizeArray[1] = {
sampleSize = 55911,
}
dataBuffer = 0x100335300
它显然包含 JPEG 数据,但我如何获取它? (最好保留相关的元数据......)
最佳答案
我最终在另一个代码示例的帮助下解决了这个问题。 CMSampleBufferGetImageBuffer
仅返回相机可用的未压缩 native 图像格式的有效结果。因此,为了让我的程序正常工作,我必须将 AVCaptureStillImageOutput
实例配置为使用 k32BGRAPixelFormat
而不是其默认 (JPEG) 压缩格式。
session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetPhoto;
imageOutput = [[AVCaptureStillImageOutput alloc] init];
// Configure imageOutput for BGRA pixel format [#2].
NSNumber * pixelFormat = [NSNumber numberWithInt:k32BGRAPixelFormat];
[imageOutput setOutputSettings:[NSDictionary dictionaryWithObject:pixelFormat
forKey:(id)kCVPixelBufferPixelFormatTypeKey]];
[session addOutput:imageOutput];
关于image - 如何从 -captureStillImageAsynchronouslyFromConnection :completionHandler:? 获得的 CMSampleBuffer 获取 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8958869/
在这里,我尝试从照片库中选择视频并将其作为samplebuffer逐帧读取,以便稍后可以裁剪或旋转。但问题是CMSampleBuffer默认旋转。我用于初始化的变量是 var asset:AVAss
我正在尝试从 CMSampleBuffer 访问样本以进行进一步处理(主要是视觉处理),这是我的代码: func captureOutput(_ output: AVCaptureOutput, d
这可能是个愚蠢的问题,但我才刚刚开始了解媒体格式和 AVFoundation,所以请多多包涵。 我一直在尝试弄清楚 AVCaptureVideoDataOutput 中的 CMSampleBuffer
我通过以下方式从我的相机获取帧: func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffe
我们的应用程序使用 AVFoundation 来捕获视频,并使用其样本缓冲区显示、操作和导出视频。我试图了解 CMSampleBufferGetPresentationTimeStamp(_:) CM
我在从 AVCaptureSession 相机中的 CMSampleBuffer 释放内存时遇到问题。这是我设置捕获 session 的代码。如果我处置 imageDataSampleBuffer,应
我正在尝试获取样本缓冲区中的图像元数据,以下是代码片段: stillImageOutput.CaptureStillImageAsynchronously(requiredConnection,(CM
我想通过网络连接发送视频流的帧,所以我实现了 AVCaptureVideoDataOutputSampleBufferDelegate 函数: func captureOutput(_ output:
我想修改CMSampleBuffer的内容,然后用AVAssetWriter/AVAssetWriterInput写入文件。 我这样做的方法是创建一个 Core Graphics 位图上下文,然后在其
使用AVCaptureAudioDataOutput时,CMSampleBuffer中存储的数据是什么?它通过委托(delegate)方法 –captureOutput:didOutputSample
我使用 AVAssetWriter 和 CMSampleBuffer 数据(来自视频、音频输入)录制视频(.mp4 文件)。 在录制时我想处理帧,我正在将 CMSampleBuffer 转换为 CII
我在 iOS 中为群组创建了一个视频聊天应用程序。我一直在寻找一些方法来分别控制不同参与者的音量。我找到了使用 RemoteAudioTrack 中的 isPlaybackEnabled 静音和取消静
我正在尝试创建由 AVCaptureAudioDataOutputSampleBufferDelegate 中的 captureOutput 返回的 CMSampleBuffer 副本. 我遇到的问题
我正在尝试创建 CMSampleBuffer 的副本,由 AVCaptureVideoDataOutputSampleBufferDelegate 中的 captureOutput 返回。 由于 CM
我从 ARSessionDelegate 得到一个 CVPixelBuffer: func session(_ session: ARSession, didUpdate frame: ARFrame
我试图从使用 AVFoundation 捕获的图像中获取曝光时间.当我按照 2010 年的 WWDC 指令从 CMSampleBuffer 检索有用的图像元数据时像这样: -(void)capture
我有一个附加到 AVPlayerItem 的 AudioTapProcessor。 这将调用static void tap_ProcessCallback(MTAudioProcessingTapRe
我想使用 GPUImageView 输出从 AVCaptureVideoDataOutputSampleBufferDelegate 接收到的 CMSampleBuffer。所以,基本上,我不希望 G
我正在使用同时录制音频和视频的外部摄像头。 我的应用程序接收具有以下结构的 AAC 格式的音频: struct AudioPacket { let timestamp: TimeInterval
我正在使用框架 (MoodMe) 来检测 iPhone 相机上的人脸,我需要将图像或帧传递给 MoodMe 实例。 我已将相机输出转换为 UIImage,但框架未检测到任何人脸。 (我觉得) 所以我想
我是一名优秀的程序员,十分优秀!