2012-01-27 51 views
2

有一个非常酷的iPhone应用程序叫Viddy,你可以下载过滤器应用到视频。Viddy如何实施可下载的过滤器?

他们如何在应用程序外部打包过滤器,并通过下载将它们提供给用户?

+0

我真的很想知道他们是如何做到这一点的......任何人都有想法? – Pavan 2012-08-14 02:30:02

+0

你怎么知道过滤器代码在应用程序之外? – Jano 2012-08-26 14:38:43

回答

1

这很简单,他们使用着色器,他们从互联网上下载。

  • 对于Mac,下载iExplorer,连接您的iPhone和Viddy安装。
  • 检查Library/effects文件夹在Viddy.app。您会在那里找到afx_1_0.xmlvfx_1_0.xml文件。
  • 将它们下载到您的Mac中,打开它们,您将在其中找到过滤器定义以及URL以下载它们。
  • 一个示例是SOHO filter。打开它,你会看到三个文件:shader.fx3其中定义了着色器,thumb.png缩略图和vignette.png文件,它也用于该着色器。

我们确实在不知名的应用程序中使用同样的方法,但我们并加密着色器本身以及所有这些信息,以避免像在评论这一个:)


加密,解密例如要求分析

  • 假设您的着色器(或任何其他文件)有.fx文件。
  • 打开Xcode并转到构建规则,您可以在其中定义*.fx文件的构建规则。将它设置为运行Custom script:它可以象这样:

    ENC_KEY = “你的加密密钥”

    $ {} PROJECT_DIR /../工具/斌/隐窝-e -k $ ENC_KEY - I $ {INPUT_FILE_PATH} \ -o “$ {BUILT_PRODUCTS_DIR}/$ {UNLOCALIZED_RESOURCES_FOLDER_PATH}/$ {INPUT_FILE_BASE} .cfx”

  • 该脚本产生.cfx文件,该文件具有相同内容作为.fx文件,但被加密。

  • crypt二进制来自这个项目:download crypt Xcode project
  • Download encrypted resource demo
  • EncryptedFileURLProtocol.*NSURL+EncryptedFileURLProtocol.*文件复制到您的项目中。
  • 在应用程序委托调用这个注册您的协议[NSURLProtocol registerClass:[EncryptedFileURLProtocol class]];
  • 现在当你想打开加密的资源,你必须使用协议encrypted-file代替file://。此任务处理演示项目中的NSURL类别,您可以简单地使用[NSURL encryptedFileURLWithPath:@"/path/to/my/encrypted/file"]

这很简单,你会发现你在示例应用程序需要(以上链接)大多数信息。你也可以在应用程序中加密你的加密/解密密钥,所以人们必须思考,而且密钥不易读。现在,当您通过此NSURL访问加密文件时,它会在应用中自动解密。解密密钥设置在sharedKeyEncryptedFileURLProtocol.m文件中。

+0

所以你说有一个文件指向一个url。在应用程序内部,你可以点击下载,它会将指定的文件下载到文件夹中,然后用作过滤器属性来达到预期的效果? – Pavan 2012-08-30 13:50:34

+0

有点偏离主题......我感兴趣的是如何加密文件,然后解密文件中未命名的应用程序以避免用户查看应用程序。我正在研究其他音乐应用程序,并能够将它的声音从它中取出,并用我自己的声音取代它,这很酷,但我不希望另一个用户能够轻松地做到这一点。如何进行加密,然后解密进程,以便未命名的应用程序可以读取并因此使用它? – Pavan 2012-08-30 13:52:56

+0

@Pavan - 他们只是从网上下载额外的着色器。 – robertvojta 2012-08-30 14:19:03

4

一种方法是将in-app purchase这只是一个描述image processing graph的文档。 (想象一下像Shake或Nuke这样的节点图形表示)。例如,辉光常常被实现为与原始图像混合的模糊图像。您可以创建一个描述处理图的文档。一旦将这样的文档下载到您的应用中,您可以使用Core Image filters来实现它,或者使用GLSL编写自己的文档,甚至可以直接进行CPU处理。

+0

谢谢你的回答。虐待应用程序购买的根...下面的用户已通过url请求建议可下载的内容,我觉得这可能是一个更快的过程,为用户。我一定会考虑在未来的应用中采用您的独家内容等方法。谢谢 – Pavan 2012-08-30 14:51:01

0

最简单的方法是将过滤器构建到应用程序本身中,然后通过应用程序内购买即可释放使用它们的能力。

如果您想要避免所需的其他图片或其他图片的下载时间,您仍然可以在主应用中包含代码,并下载所需的额外资源。您可以使用类似Urban Airship's IAP support的东西来主机&下载IAP资源。 (您可能还想看看iOS 6的新功能。)

+0

它不是解锁一个功能的情况..它更多的情况下,我不希望应用程序是巨大的,并且某些过滤器被下载到应用程序只是viddy的方式,所以用户可以选择是否安装添加或不添加。该应用程序本身会增加内部是否将其文件下载到文件夹或不知道im不知道。让我感到困惑的是,在viddy应用程序中下载的新内容如何在无需更新应用程序本身的情况下无缺陷地工作 – Pavan 2012-08-26 14:51:41

+0

我想我在下半部分的答案中解决了下载IAP的额外内容的问题;您可以让这些作品由Urban Airship托管,并在用户购买您的IAP时下载这些作品。 – 2012-08-26 15:02:53

0

GLSL着色器可以以源代码形式下载,然后用于处理。它提供了非常灵活的方式,在应用发布后创建新的过滤器。另一方面,更新(下载)额外的过滤器数据可能就足够了。例如,Instagram对大多数过滤器使用相同的颜色曲线技术,但具有不同的曲线数据,因此他们希望它们能够在线更新过滤器。

0

视频的过滤器也使用CIImage类,如图像的intagram应用程序。请参阅此处的链接:“http://www.icapps.be/face-detection-with-core-image-on-live-video/”。现在过滤器可以下载过滤器(实际上它的In App Purchase正在发生)。

把购买/下载方法的情况下正下方:

case SKPaymentTransactionStatePurchased: 
     [self ...]; 

所以发生了什么是免费的购买过滤器,可以在任何视频中使用。实际上,方法可以在SKPaymentTransactionStatePurchased之后进行过滤。

+1

因此,它的应用程序购买,然后允许下载所需的文件,然后您可以调用将处理下载的文件的方法?嗯,这很简单? – Pavan 2012-08-30 13:54:58