Flash to Html5 або таємне api Swiffy

Всім привіт. Думаю, ні для кого не секрет, що 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 : {
версія : "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 в інтерфейсі вашого продукту, де за лаштунками буде проводитися конвертування. Не варто забувати, що не всі флешки вийде конвертувати і це об'єктивний ризик.

Дякую за увагу.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.