Итак, это свершилось. Кроме iPhone 8, который устарел ровно через полчаса после анонса iPhone 10, Apple обновила свой десктопный и мобильный браузер Safari. Среди прочих улучшений — реализация WebRTC (ходят слухи, что частично позаимствованная у Chromium. «Plan B» на это тоже намекает). Что это значит для разработчиков? Можно звонить через браузер как на десктопе, так и на айфонах. Голосом и видео. Я уже писал про обновленные инструменты разработчика в браузере, а сейчас хочу поделиться, как это все работает в релизе. Мы уже обновили SDK Voximplant, проверили, как Safari звонит в Microsoft Edge, и вот что я хочу рассказать…

Видео само не заиграет


Apple внимательно изучила опыт других браузеров, прежде чем добавить поддержку в свой собственный. Вместе с поддержкой было добавлено множество ограничений, которые призваны защитить пользователей от нежелательных баннеров, рекламы и прочих нехороших вещей, которые так любят многие сайты. Одно из таких ограничений для iOS версии браузера: элемент video, в который WebRTC обычно выводит видеопоток с локальной камеры и/или со второго конца звонка, не будет проигрывать видео, пока пользователь в явном виде это не разрешит.

Как выглядит «явное разрешение от пользователя»? Это должен быть интерактивный элемент, в обработчике 'onclick' которого нужно вызвать метод 'play' для объекта видео. Вызов этого метода из другого места кода или программное нажатие на кнопку не включат воспроизведение видео. Помнится, много лет назад программисты Blizzard так же боролись с ботоводами в World of Warcraft, делая «protected» API, вызывать которые можно было только в ответ на действия пользователя.


Safari поддерживает только h.264 видеокодек


Когда два устройства договариваются об установке подключения, они обмениваются (с вашей помощью) текстовыми SDP пакетами. Где, кроме всего прочего, указаны поддерживаемые кодеки. h.264 поддерживают последние версии Chrome, Firefox и Edge — но в более старых версиях ее может не быть. Более того, кроме браузеров видеозвонки могут приходить и от других SIP-совместимых устройств: телефонов, программ-клиентов, мобильных приложений. И если там нет поддержки h.264 — то видеосвязи не будет.

Мелочи, о которых стоит знать


Chrome и Safari для описания медиапотоков в SDP-пакете использует «Plan B». А Firefox — «Unified Plan». Поэтому если больше одного медиапотока (например, при нескольких видеопотоках разного качества) — то кому-то придется выступать в роли переводчика. А про Edge я промолчу.

Также Safari накладывает ряд ограничений на использование WebRTC: только HTTPS, iframe’ы только с того же домена, что и сайт. И если первое требование не вызывает никаких проблем, то требования к iframe’ам сильно ограничивает использование встраиваемых виджетов. С другой стороны, Apple тоже можно понять — именно с таких виджетов чаще всего идет навязчивая видеореклама.

Комментарии (5)


  1. some_x
    21.09.2017 07:28

    А про Edge я промолчу.

    И всё же, что с ним?


    1. eyeofhell Автор
      21.09.2017 10:14
      +3

      Если не считать того, что вместо STUN серверов они используют TURN в альтернативном режиме: они реализовали собственный multistream протокол, который не совместим ни с Plan B, ни с Unified Plan. И доступна эта радость только из альтернативного oRTC API. Через три недели мне это все рассказывать в Амстердаме на Microsoft Tech Days и я очень боюсь, что если расскажу как есть — то ребята меня там и прикопают О_О


  1. vitamin
    21.09.2017 11:22
    +2

    Ну Microsoft в своём духе – embrace and extend. И времена уж не те, а они опять.


  1. vitamin
    21.09.2017 11:23

    то кому-то придется выступать в роли переводчика

    The mechanism chosen for the official WebRTC specification isn't Plan B but rather Unified Plan. Plan B is supported by Chrome. Google is planning to replace it with Unified Plan in the future.

    Я правильно понимаю, что скоро будет всё хорошо? :)


    1. eyeofhell Автор
      21.09.2017 11:26
      +2

      Гугл — собирается поддерживать Unified Plan. Safari сделали Plan B и молчат (с шансами — скопипастили из Chromium). Edge собирается не поддерживать ни то, ни другое :)

      С другой стороны, положа руку на сердце — нужны это планы только если мы собираемся синхронно отправлять несколько видеопотоков. Симулкасты всякие, одновременная трансляция видео в разных разрешениях и так далее. В простом случае — голос или видео + голос — все браузеры выдадут более-менее одинаковый SDP.