Как Viddy реализует загружаемые фильтры? - PullRequest
2 голосов
/ 27 января 2012

Существует очень классное приложение для iPhone под названием Viddy, где вы можете загружать фильтры для применения к видео.

Как они могут упаковать фильтры вне приложения и сделать их доступными для пользователей при загрузке?

Ответы [ 5 ]

4 голосов
/ 26 августа 2012

Одним из способов будет покупка в приложении , это просто документ, описывающий график обработки изображений . (Подумайте о представлении узлового графа для чего-то вроде Shake или Nuke.) Например, свечение часто реализуется как размытое изображение, смешанное с исходным изображением. Вы можете создать документ, который описывает этот график обработки. После того, как вы загрузили такой документ в свое приложение, вы можете реализовать его, используя Core Image filters , или написать свой собственный, используя GLSL , или даже просто обработав процессор.

1 голос
/ 30 августа 2012

Это довольно просто, они используют шейдеры и загружаются из Интернета.

  • Загрузка iExplorer для Mac, подключите ваш iPhone с установленным Viddy.
  • Отметьте Library/effects папку в Viddy.app.Там вы найдете файлы afx_1_0.xml и vfx_1_0.xml.
  • Загрузите их на свой Mac, откройте их, и там вы найдете определения фильтров и URL-адрес для их загрузки.
  • AnНапример, SOHO фильтр . Загрузите этот файл , откройте его, и вы увидите там три файла: shader.fx3, где определен шейдер, thumb.png для миниатюры и vignette.png файл, который также используется для этого шейдера.

Мы использовали тот же подход в неназванном приложении, но мы зашифровали всю эту информацию вместе с самими шейдерами, чтобы избежать такого анализа:)


Шифрование,Пример расшифровки запроса в комментарии

  • Допустим, у вас есть файл .fx с вашим шейдером (или любым другим файлом).
  • Откройте Xcode и перейдите в BuildПравила, в которых вы можете определить правило сборки для *.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"

  • * 1047файл, который имеет то же содержимое, что и файл .fx, но зашифрован.
  • crypt двоичный файл поступил из этого проекта: загрузить проект crypt Xcode .
  • Загрузка демонстрации зашифрованного ресурса .
  • Копирование файлов EncryptedFileURLProtocol.* и NSURL+EncryptedFileURLProtocol.* в ваш проект.
  • В приложении делегат вызовите это, чтобы зарегистрировать ваш протокол [NSURLProtocol registerClass:[EncryptedFileURLProtocol class]];
  • И теперь, когда вы действительно хотите открыть зашифрованный ресурс, вы должны использовать протокол encrypted-file вместо file://.Эта задача обрабатывает категорию NSURL из демонстрационного проекта, и вы можете просто использовать [NSURL encryptedFileURLWithPath:@"/path/to/my/encrypted/file"].

Это довольно просто, и вы найдете большую часть необходимой информации в примере приложения (ссылка выше).Кроме того, вы можете манипулировать своим ключом шифрования / дешифрования в приложении, так что люди должны думать, и ключ не легко читается.Теперь, когда вы получаете доступ к зашифрованному файлу через этот NSURL, он автоматически расшифровывается для вас в приложении.Ключ дешифрования устанавливается в sharedKey в EncryptedFileURLProtocol.m файле.

0 голосов
/ 30 августа 2012

Фильтр для видео также использует класс CIImage, как приложение Intagram для изображений.См. Ссылку здесь: "http://www.icapps.be/face-detection-with-core-image-on-live-video/". Теперь фильтры можно загрузить фильтром (фактически это происходит при покупке в приложении).

Укажите способ покупки / загрузки прямо под кейсом:

 case SKPaymentTransactionStatePurchased:
      [self ...]; 

так что происходит, это покупка фильтра бесплатно, который можно использовать для любого видео. На самом деле метод включен, чтобы иметь фильтр после SKPaymentTransactionStatePurchased.

0 голосов
/ 29 августа 2012

GLSL-шейдеры могут быть загружены в виде исходного кода и затем использованы для обработки.Это дает очень гибкий способ создания новых фильтров после публикации приложения.С другой стороны, может быть достаточно просто обновить (загрузить) дополнительные данные фильтра.Например, Instagram использует одну и ту же технику цветовой кривой для большинства фильтров, но с другими данными кривой, поэтому, если они захотят, они смогут обновлять свои фильтры онлайн.

0 голосов
/ 26 августа 2012

Самый простой способ сделать это - встроить фильтры в само приложение, а покупка в приложении просто откроет возможность их использования.

Если вы хотите избежать времени загрузки всех дополнительных изображений или других необходимых фрагментов, вы все равно можете включить код в основное приложение и просто загрузить необходимые дополнительные ресурсы. Вы можете использовать что-то вроде поддержки IAP Urban Airship для размещения и загрузки ресурсов IAP. (Вы также можете посмотреть на новые функции iOS 6 в этом ключе.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...