【问题标题】:How does Viddy implement downloadable filters?Viddy 如何实现可下载过滤器?
【发布时间】:2012-01-27 18:23:58
【问题描述】:

有一个非常酷的 iPhone 应用程序叫 Viddy,您可以在其中下载过滤器以应用于视频。

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

【问题讨论】:

  • 我真的很想知道他们是如何做到这一点的......有人有想法吗?
  • 怎么知道过滤器代码在app外?

标签: iphone objective-c ios ios4 ios5


【解决方案1】:

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

【讨论】:

  • 感谢您的回答。生病查看应用内购买的根源......下面的用户建议通过 url 请求下载可下载内容,我觉得这对用户来说可能是一个更快的过程。我一定会考虑在未来的应用程序中采用您的独家内容等方法。谢谢
【解决方案2】:

这很简单,它们确实使用着色器,并且是从互联网上下载的。

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

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


注释中的加密、解密示例请求

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

    ENC_KEY="你的加密密钥"

    ${PROJECT_DIR}/../Tools/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.* 文件复制到您的项目中。
  • 在应用程序委托中调用这个来注册你的协议[NSURLProtocol registerClass:[EncryptedFileURLProtocol class]];
  • 现在,当您确实要打开加密资源时,您必须使用协议encrypted-file 而不是file://。此任务处理来自演示项目的NSURL 类别,您可以简单地使用[NSURL encryptedFileURLWithPath:@"/path/to/my/encrypted/file"]

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

【讨论】:

  • 所以你说有一个文件指向一个 url。在app里面可以点击下载,将指定的文件下载到documents文件夹中,然后作为过滤属性来达到想要的效果?
  • 有点跑题了……我感兴趣的是你如何加密文件然后解密文件你的未命名应用程序以避免用户查看应用程序。我研究了其他音乐应用程序,并能够从中删除声音并将其替换为我自己的声音,这很酷,但我不希望其他用户能够轻松地做到这一点。如何进行加密和解密过程,以便未命名的应用程序可以读取并使用它?
  • @Pavan - 他们只是从网上下载额外的着色器。
  • @Pavan 添加了一个如何在 iOS 应用程序中加密、解密的示例。更好地下载链接的演示项目并从中学习。
  • 是的,那太好了。因为那时我可以在我的沙箱中拥有加密文件,所以如果有人查看它..除了应用程序本身之外它不会有任何用处..因为只有应用程序可以解密最初与它一起打包到应用程序商店的加密文件。如果这有意义的话。
【解决方案3】:

执行此操作的最简单方法是将过滤器构建到应用本身中,并通过应用内购买解锁使用它们的能力。

如果您想避免下载所需的所有额外图像或其他部分,您仍然可以将代码包含在主应用程序中,然后下载所需的额外资源。您可以使用 Urban Airship's IAP support 之类的东西来托管和下载 IAP 资源。 (您可能还想以这种方式研究 iOS 6 的新功能。)

【讨论】:

  • 这不是解锁功能的情况.. 更多的是,我不希望应用程序很大,并且某些过滤器可以像 viddy 那样下载到应用程序所以用户可以选择是否安装插件。应用程序本身是否会在文件下载到文档文件夹中增加,我不确定。让我感到困惑的是,在 viddy 应用程序中可下载的新内容如何能够完美运行而无需更新应用程序本身
  • 我想我在答案的后半部分解决了为 IAP 下载附加内容的问题;您可以让这些作品由例如 Urban Airship 托管,并在用户购买您的 IAP 时下载这些作品。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    将购买/下载方法放在机箱下方:

     case SKPaymentTransactionStatePurchased:
          [self ...]; 
    

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

    【讨论】:

    • 所以它是一个应用内购买,然后允许下载所需的文档,然后您可以调用处理下载文件的方法?嗯,就这么简单?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2011-09-20
    • 2021-08-31
    • 2020-05-12
    相关资源
    最近更新 更多