Як переписати SDK на TypeScript, оновити платформу і ні про що не шкодувати

image

У нас нова версія WebSDK – v4. Поки це тільки public beta версія, але вона вже стабільна для більшості повсякденних кейсів. Ми намагалися зберегти зворотну сумісність нової версії.
А ще оновлена платформа – v3. Там багато всього нового і цікавого. Все працює швидше і веселіше. Про подробиці нижче.
Як бачите, у нас дабл страйк! Під катом – що вийшло за 6 місяців перехресного дебага, безперервного поліпшення і болю. Спойлер: більше ніякого стародавнього Flash. Тільки чистий WebRTC + ORTC.
Нові штуки в SDK
Ми переписали все на TypeScript. Буквально кожен рядок і функцію SDK з нуля. Основною причиною стала підтримка. Typescript набагато простіше підтримувати, ніж Vanilla JS. З допомогою ризикованого кроку ми зможемо надавати вам оновлення набагато частіше. До того ж, ми скоро представимо нові tsd файли для вашого улюбленого мови.
Вага SDK збільшився всього на 12КБ. Така була ціна впровадження TypeScript. Це невелика проблема, якщо ви здійснюєте голосові і відеодзвінки. Якщо вас бентежить обсяг 111 КБ, рекомендую використовувати async режим завантаження. Взагалі, раджу завжди користуватися саме async завантаженням нашого скрипта. Зайві моменти очікування ваших користувачів засмучують і нас теж.
Збираємо все з допомогою Webpack. Попередня версія SDK збиралася за допомогою Gulp, sh і божественної допомоги. Нам потрібен був стабільний автодеплой і простота конфігурації, автозбирання документації, складання npm модулів, tsd, автоматичне версіонування… Я міг би продовжувати вічно, так і будь-хто зможе докинути в цей список пару-трійку пунктів з особистих DevOps бажань. І так сталося що Webpack може все, що ми хотіли. Та ще він працює швидко.


Зробили доступними аудіо дзвінки в/з Microsoft Edge. ORTC замість WebRTC, відсутність рішень на StackOverflow (Ctrl+C -> Ctrl+V не міг нас врятувати), 7 кіл пекла підтримки MS, недокументовані помилки. Про біль і страждання одного окремого програміста з одним окремим Їжаком ви можете почитати в моїй попередній статті. На те щоб викувати їжакові рукавиці для нашого SDK і зробити вам зручний API пішла значна частина циклу розробки. У результаті можна говорити з користувачами Edge, вони можуть говорити з вами. Незабаром Edge з'явиться VP9 – зможете побачитися.
Можна зробити пріоритетним h 264 кодек або встановити пріоритети інших кодеків. Як правило, мобільні пристрої мають hardware кодування/декодування h264 і software кодування/декодування VP8. Якщо зателефонувати на мобільний з Chrome з пріоритетом за замовчуванням вибрано VP8. Software rendering. Хто грав з ним в ігри, відразу знає, що це біль. На жаль, з браузерами частіше все строго навпаки. Це дозволить вам робити енергоефективні дзвінки на мобільні додатки з нашим WebSDK або налаштовувати пріоритет кодеків для екзотичних залозок і кейсів.


Можна вмикати/вимикати відео під час виклику. Це Renegotiation, товариші! Renegotiation – це повторний обмін можливостями ваших браузерів в момент, коли ви включили/вимкнули відео. Поясню на Павлах. Припустимо Павло А. дзвонить Павлу Б. голосом. Два Павла щасливо спілкуються в браузерах. Тепер Павло Б. хоче показати свою нову двоголову черепаху Павлу А. Без renegotiation треба було б закінчити нього і почати відео. А тепер Павли можуть не перериватися. Правда, вони ніколи не дізнаються про renegotiation. Павло Б. натискає кнопку і міццю нашого SDK його бачить Павло А.! До того ж один з Павлов може показувати своє відео, а другий – ні. Прямо як в скайпі.
Hold/Unhold зроблений засобами WebRTC і працює тепер і в Peer-To-Peer режимі. Hold – це коли ви ставите виклик на утримання і магічним чином звук і відео не йдуть. Unhold – це коли ви знімаєте дзвінок з утримання і магічним чином все знову йде. У старій версії SDK теж був такий функціонал, але бар'єром між потоками звуку ставав наш сервер. Трафік йшов. Тепер трафік не йде. Ваш браузер скаже сервера або іншому клієнту про те, що ви тимчасово приостанавливаете обмін і всі щасливі. Менше трафіку і довше життя батареї.


Фільтри і маски для реалізації ваших ідей. Можна взяти входить аудіопотік і зробити голос бурундука. Взяти вихідний і відправити голос Дарта. При цьому додавши компресії і митола! Можна взяти відеопотік, прогнати його через canvas і нейронну мережу і додати вуса в стилі Пікассо. Вирішувати вам! Даєш свій MSQRD в браузері!
Нові штуки в серверної частини
Зменшилася затримка звуку і відео. Ми поміняли схему дзвінка. RTP трафік тепер ходить через один сервер, а раніше ходив через ланцюжок в три сервера. Тести показали скорочення затримки на 180м/с в обидва боки.
Поліпшена робота на поганих мережах для Chrome. Додана підтримка технології REMB. Це технологія дозволяє керувати якістю картинки та звуку на слабких каналах. Допомагає від заїкань та пропадання звуку на слабких мережах. Технологія розумна, вона не буде знижувати якість сигналу на хорошому з'єднанні. А якщо якість з'єднання скаче, то підлаштується.



Тепер можна тільки в серверному сценарії вибирати, як піде дзвінок P2P/ViaServer. Наша платформа вміє працювати в 2 режимах: PeerToPeer і через наш медіа сервер. У разі роботи в Peer-To-Peer медіа трафік йде від абонента до абонента безпосередньо. Ні ми, ні ви його не побачимо і не зможемо записати або відправити в телефонну мережу, наприклад. Для серверного сценарію все йде через наш сервер зі всіма плюсами. Раніше клієнтські додатки для цих двох сценаріїв відрізнялися — потрібно було передати прапор X-DirectCall при старті дзвінка, та ще й у сценарії VoxEngine все правильно обробити. Тепер все простіше. Рішення приймається в сценарії VoxEngine. При старті дзвінка ви зможете визначити, чи потрібен вам серверний дзвінок або досить Peer-To-Peer і правильно з'єднати абонентів.
Аудіо/відео треки тепер синхронізуються в Firefox і Chrome. На стороні хмари відбувається інтелектуальний вибір контексту синхронізації, розрахунок затримок на основі RTCP статистики. А браузер згідно контексту синхронізації правильно збирає пари аудіо-відео. Дрібниця, а приємно — не треба буде дивитися в минуле, а слухати сьогодення.
Бойові втрати
Видалено старе Messaging API. Трохи спойлерів – ми робимо його краще, свіже, швидше і сексуальніше. Скоро скоро, коли дозволить тимлид, воно потрапить у публічну бета. А поки на його місці тимчасово нічого.

Ми видалили Flash. Не взагалі з веба, такого ми не можемо, на відміну від Google, який цим активно займається, а тільки з нашого SDK. Хоча нашій радості немає меж, але є і трохи сумного в цьому. Відданим користувачам Safari, IE доведеться користуватися плагіном від Temasys для імітації WebRTC. Якщо ваші користувачі якраз ті самі 4.9% Рунета, рекомендую трохи почекати, поки вони оновляться, або використовувати стару версію нашого SDK.




На закінчення всього хочу сказати, що ми оновили документацію і відкрили gitter канал, де ви можете оперативно отримати технічну підтримку по новій версії sdk. Тестуйте його.



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

0 коментарів

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