Всем привет. Думаю, не для кого не секрет, что 1 сентября(то есть завтра) гугл останавливает в хроме воспроизведение периферийного flash-контента. Иными словами, flash-баннеры перестают запускаться без прямого указания пользователя(каковое вряд ли последует). Поэтому имеет смысл начинать переходить на так называемые html5-баннеры. А чтобы смягчить переход, надо конвертировать flash в html5.
Многие знают, что у гугла есть сервис для такой конвертации — Swiffy. Однако он существует либо как веб-приложение, либо как расширение к Flash Professional. Никакого публичного api(а тем более его документации) вроде как нет. Однако это не так.
Если внимательно присмотреться к расширению swiffy для flash, то можно заметить, что оно работает с с веб-сервисом google. А раз оно работает, то и мы попробуем. Достаточно послать на определённый url post-запрос с json-объектом:
{ apiVersion : "v1", method : "swiffy.convertToHtml", params : { client = "Swiffy Flash Extension", input = "base64Data" } }
где в поле input пишем закодированный base64 flash-контент. И надо не забыть в base64-кодировке заменить ‘+’ на ‘-‘ и ‘/’ на ‘_’ для url safe формата.
Если всё хорошо то в ответ мы получим такой объект:
{ result : { response : { version : "api version", status: "SUCESS", output: "base64response" } } }
Если произошла ошибка, ответ будет таким:
{ error : { message: "Сообщение об ошибке" } }
где version — номер версии api swiffy, a output — закодированный base64 ответ. На нём остановимся.
Во-первых, для декодирования надо не забыть произвести обратную замену ‘-‘ на ‘+’ и ‘_’ на ‘/’. Далее необходимо по надобности(чтобы размер был кратен 4) добавить 1 или 2 символа ‘='(как указание на лишний нулевой байт). Теперь можно и раскодировать. Однако это ещё не всё. Раскодировав, мы не получим html-код, а получим gzip-архив с html-кодом. После распаковки, у нас наконец-то будет html — эквивалент(хотелось бы так думать) загруженной флешки.
Есть реализация для всего этого в npm-пакете: swiffy-convert от Rafael Belvederese.
Для .net я написал небольшую библиотечку: jdart.swiffy, которая доступна через nuget-пакет.
Использовать её очень просто:
var swf = File.ReadAllBytes("sample.swf"); var swiffyClient = new SwiffyClient(); string html5page = await swiffyClient.ConvertToHtml5Async(swf); File.WriteAllBytes("sample.html", Encoding.UTF8.GetBytes(html5page));
Используя данный подход можно быстро преобразовать большое число флешек, либо оставить поддержку flash в интерфейсе вашего продукта, где за кулисами будет производиться конвертирование. Не стоит забывать, что не все флешки получится конвертировать и это объективный риск.
Спасибо за внимание.
ссылка на оригинал статьи http://habrahabr.ru/post/265739/
Добавить комментарий