iPhone视频缓冲区

时间:2008-12-01 20:39:29

标签: iphone

我正在尝试构建一个没有越狱我的iPhone录像机(我是开发人员许可证)。 我开始使用PhotoLibrary私有框架,但我只能达到2ftp(太慢)。 Cycoder应用程序的fps为15,我认为它采用了不同的方法。 我试图从CameraController的previewView创建一个位图,但它总是返回e黑色位图。

我想知道是否有办法直接访问视频缓冲区,可能使用IOKit框架。

由于 马可

5 个答案:

答案 0 :(得分:1)

以下是代码:

image = [window _createCGImageRefRepresentationInFrame:rectToCapture];

答案 1 :(得分:1)

这是一个大问题。到目前为止,我已经解决了使用一些临时固定大小的缓冲区,并在满了时为每个缓冲区分离一个线程。该线程将缓冲区内容保存在闪存中。启动一些繁重的线程,因为每个线程访问闪存都很重,会降低设备的速度并刷新摄像机视图。 缓冲区不能很大,因为你会得到内存警告,并且因为你会冻结设备,因为一次有太多的线程和访问闪存,所以它不会很小。 解决方案在于平衡缓冲区大小和线程数。

我还没有尝试使用sqlite3 db来存储图像二进制数据,但如果是更好的解决方案,我不会这样做。

PS:为了加快类方法调用,避免常见的解决方法[对象方法]因为方法调用的工作方式,但是尝试获取并保存方法地址如下。

来自Apple ObjC doc:

“下面的示例显示了实现setFilled:方法的过程如何 叫:

void (*setter)(id, SEL, BOOL); 
int i; 
setter = (void (*)(id, SEL, BOOL))[target methodForSelector:@selector(setFilled:)]; 
for ( i = 0; i < 1000, i++ ) 
setter(targetList[i], @selector(setFilled:), YES); "

答案 2 :(得分:0)

如果您打算在App Store上发布您的应用程序,使用私有框架将确保它将被拒绝。使用SDK的视频根本不受支持。

答案 3 :(得分:0)

要捕获视频,您可以在相机处于活动状态时看到需要相当复杂的技术,而不是任何框架/ lib开箱即用。

答案 4 :(得分:0)

我使用了未记录的UIWindow方法将当前显示的帧作为CGImageRef获取。 现在它成功运作!!

如果你愿意的话,如果我允许的话,我可以发布执行该技巧的代码。

相关问题