我正在使用 AVFoundation 使用 captureStillImageAsynchronouslyFromConnection 从相机捕获静止图像(捕获静止图像而不是视频帧)。这给了我一个 CMSSampleBuffer 类型的缓冲区,我称之为 imageDataSampleBuffer。
据我了解,这个缓冲区可以包含与媒体相关的任何类型的数据,而数据类型是在我配置输出设置时确定的。
对于输出设置,我制作了一个字典,其值为:AVVideoCodecJPEG,键为:AVVideoCOdecKey。
没有其他编解码器选项。但是当我阅读 AVFoundation Programming Guide>Media Capture 时,我可以看到 420f、420v、BGRA、jpeg 是 iPhone 3gs 支持的可用编码格式(我正在使用)
我想将 yuv420(即 420v)格式的图像数据放入 imageSampleBuffer。那可能吗?
如果我打印 availableImageDataCodecTypes,我只会得到 JPEG 如果我打印 availableImageDataCVPixelFormatTypes,我会得到三个数字 875704422、875704438、1111970369。
这三个数字是否可能映射到 420f、420v、BGRA?
如果是,我应该在输出设置中修改哪个键?我尝试将值:[NSNumber numberWithInt:875704438] 用于键:(id)kCVPixelBufferPixelFormatTypeKey。它会起作用吗?
如果是,我如何从 imageSampleBuffer 中提取这些数据?
另外, UIImage 以哪种格式存储?可以是任何格式吗?只是 NSData 带有一些额外的信息,使其被解释为图像吗?