2008-12-01 107 views
3

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

我不知道是否有办法直接访问视频缓冲区,也许与IOKit框架。

感谢 马尔科

回答

0

如果你打算永远发布在App商店中的应用,使用专用框架将确保它会被拒绝。使用SDK的视频根本不受支持。

0

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

0

我使用了非文档化的UIWindow方法来获取当前显示的帧为CGImageRef。 现在它工作成功!

如果你愿意,并且如果我被允许,我可以发布代码来实现这个诀窍。

马尔科

1

下面是代码:

image = [window _createCGImageRefRepresentationInFrame:rectToCapture]; 

马尔科

1

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

我还没有试图使用sqlite3数据库来存储图像二进制数据,但我不会如果将是一个更好的解决方案。

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

从苹果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); " 

马尔科