Viddy如何实现可下载的过滤器?

时间:2012-01-27 18:23:58

标签: iphone objective-c ios ios4 ios5

有一款名为Viddy的非常酷的iPhone应用程序,您可以下载过滤器以应用于视频。

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

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

我们在未命名的应用程序中使用了相同的方法,但我们确实加密了所有这些信息以及着色器本身以避免像这样的分析:)


评论中的加密,解密示例请求

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

    ENC_KEY = “您的加密密钥”

    $ {PROJECT_DIR} /../工具/ bin / crypt -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.*个文件复制到您的项目中。
  • 在app delegate中调用此方法注册您的协议[NSURLProtocol registerClass:[EncryptedFileURLProtocol class]];
  • 现在,当您确实要打开加密资源时,必须使用协议encrypted-file而不是file://。此任务处理演示项目中的NSURL类别,您只需使用[NSURL encryptedFileURLWithPath:@"/path/to/my/encrypted/file"]

这很简单,您可以在示例应用中找到所需的大部分信息(上面的链接)。此外,您可以在应用程序中破坏加密/解密密钥,因此,人们必须思考并且密钥不易读取。现在,当您通过此NSURL访问加密文件时,它会在应用程序中自动解密。解密密钥在sharedKey文件中的EncryptedFileURLProtocol.m中设置。

答案 2 :(得分:0)

最简单的方法是将过滤器构建到应用程序本身,让应用内购买只是解锁使用它们的能力。

如果您想避免所有其他图片或其他所需图片的下载时间,您仍然可以将代码包含在主应用程序中,只需下载所需的额外资源即可。您可以使用类似Urban Airship's IAP support的内容来托管&下载IAP资源。 (您可能还想以这种方式研究iOS 6的新功能。)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

将购买/下载方法放在案例正下方:

 case SKPaymentTransactionStatePurchased:
      [self ...]; 

所以发生的事情是免费购买过滤器,可用于任何视频。实际上,在SKPaymentTransactionStatePurchased后,方法启用了过滤器。