我正在尝试查找AVFoundation输出上可接受的格式:
self.theOutput=[[AVCaptureVideoDataOutput alloc]init];
if ([self.theSession canAddOutput:self.theOutput])
[self.theSession addOutput:self.theOutput];
然后,我在和之后插入一个断点:
po [self.theOutput availableVideoCVPixelFormatTypes]
然后我得到了这个
(NSArray *) $5 = 0x2087ad00 <__NSArrayM 0x2087ad00>(
875704438,
875704422,
1111970369
)
如何获得这些格式类型的字符串值?
谢谢
4条答案
按热度按时间fkvaft9z1#
在运行iOS6的iPhone5上,以下是可用的AV捕获视频数据输出视频CV像素格式类型:
kCV像素格式类型_420YpCbCr8双平面视频范围
kCV像素格式类型_420YpCbCr8双平面全范围
kCV像素格式类型_32BGRA
值得表扬的地方,我找到了一种方法来获得这里支持的值。https://gist.github.com/2327666
kx1ctssn2#
用于调试的类别版本
作为NSNumber上的类别
诊断输出示例
vngu2lb83#
当你调用availableVideoCVPixelFormatTypes时,你会得到所有像素格式类型标签的十进制表示。如果你把它们转换成十六进制,你可以把其中一些匹配到苹果文档中列出的标签。对于其余的,你必须把你得到的十六进制值转换成ASCII字符,以最终匹配标签。
(十进制)------〉(十六进制)---〉(ASCII)
875704438-〉34323076-〉420伏
875704422-〉34323066-〉420女性
1111970369-〉42475241-〉英国政府监管局
我发现这个网站"ASCII to Hex"是有用的。
ikfrs5lh4#
您可以像这样转换
availableVideoCVPixelFormatTypes
返回的值:并且输出将是
这些值对应于
CoreVideo
的CVPixelBuffer.h
中描述的枚举值:代码解释:常量值'420v'在内存中存储为4个字节,同时
int
也是4个字节,这允许我们将'420v'转换为字节,然后再转换回int。下面的代码行将一个值作为
int
写入字符缓冲区,以便以后作为字符串读取。唯一的问题是Objective-C通常会将一个int值保存为little endian,这将产生'v024'而不是'420v',因此,我们需要使用
CFSwapInt32HostToBig
将一个枚举值转换为big endian
,然后再将其保存到缓冲区。希望这个有用。