Мой Опыт Использования Webrtc В Приложении Ios

WebRTC (англ.

Real-time communication) — проект с открытым исходным кодом, предназначенный для организации потоковой передачи данных между браузерами или другими поддерживающими его приложениями с использованием технологии «точка-точка».

Для полного понимания статьи рекомендую ознакомиться с основными принципами технологии.

здесь .



Мой опыт использования WebRTC в приложении iOS



Как я пришел к необходимости использовать WebRTC

Цель проекта: Давайте представим, что нам нужно соединить двух случайных пользователей для передачи друг другу потокового видео в реальном времени.

Какие варианты решения проблемы? Опция 1: Организовать подключение двух пользователей к серверу как источнику и приёмнику видеопотока и дождаться приёма видео от собеседника.

Минусы:

  • Дорогое серверное оборудование.

  • Низкая расширяемость из-за ограниченных ресурсов сервера.

  • Задержка видео увеличена из-за посредника
Плюсы:
  • Проблем с выбором пользователя и подключением к нему нет — за нас это делает сервер
Вариант 2: Подключаемся к пользователю напрямую, образуя туннель для передачи данных «между бандами», заведомо получая информацию об этом пользователе с сервера.

Минусы:

  • Длительная работа соединения для двух пользователей
  • Сложности с созданием одноранговых соединений.

  • Трудности с протоколом NAT для прямой передачи данных
  • Требуется несколько серверов для создания соединения
Плюсы:
  • Разгрузка сервера
  • Сервер может перестать работать, но видео не будет прерываться
  • Качество изображения напрямую зависит от качества канала передачи данных пользователей.

  • Возможность использования сквозного шифрования.

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

Было решено использовать вариант №2. После усердных поисков в Интернете и более 9000 потерянного времени я наткнулся на технологию WebRTC, которая предлагала решить те недостатки, которые я выявил в процессе анализа подходов к решению проблемы.



Выполнение

Начался второй этап поиска.

На нем я наткнулся на множество разных платных библиотек, которые предлагали мне решить мою проблему, нашел много материалов про WebRTC, но реализации под iOS мне найти не удалось.

Затем случайно я зашел в git ядра браузера Google и заметил папку под названием «WebRTC», в которой было несколько файлов и две папки: «Android» и «iOS».

Зайдя в папку, которая мне понравилась больше остальных, я нашел множество файлов исходной библиотеки и папку «Example», в которой находился проект под названием «AppRTC».



Мой опыт использования WebRTC в приложении iOS

Я сразу запустил этот проект на своем устройстве и на втором iOS-устройстве, которое оказалось под рукой, и смог соединить их и общаться сам с собой на двух телефонах.

Самый быстрый способ интеграции видеочата в мое приложение, в котором уже были некоторые функции (регистрация, авторизация), я увидел, наложив на свое приложение пример «AppRTC», чем и начал заниматься.

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

Мы решили найти пример серверов для «AppRTC», а также потратили много времени с серверным разработчиком на отладку сервера и подружку между сервером и клиентом.

В конечном итоге всё в «сервисе» разделилось на две части:

  • Авторизация, регистрация, фильтр поиска собеседников, настройки, покупки и так далее;
  • Видео-конференция.

Разработка шла, но после начала отладки я столкнулся с тем, что библиотека работала совершенно нестабильно, были постоянные обрывы соединения, плохое качество видео, 120% загрузка процессора устройства, низкая частота обновления кадров и многое другое.

На оптимизацию было потрачено много времени, но к каким-то реальным результатам это не привело: были небольшие изменения в скорости работы, но всё равно не торт. Кодек VP8 также требовал много ресурсов, а поддержки других у сервиса на тот момент не было.

Пришла идея обновить библиотеку полностью.

После переделки 80% кода, написанного до обновления, он всё равно не работал, а пример не обновился до последней версии.

Серверная часть также отказалась работать с новой версией библиотеки.

Решением оказалось не использовать собственный сервер для WebRTC. То есть сервер самого приложения только анализировал подключенных к нему пользователей и предлагал им подключиться, после чего приложения начинали работать с сервером самого «AppRTC» и всеми взаимодействиями с передачей пакетов, STUN и TURN. сервера находились там.

Также мне пришлось самостоятельно все переписать в приложении на актуальную версию.

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

Код видеочата был полностью переработан, приложение стало работать еще быстрее и стало удобнее.

В результате оптимизации кода библиотека вынесена в отдельный «Под».

здесь .



Заключение

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

Видеочат реализован с использованием новых технологий практически без материальных затрат, а качество видео напрямую зависит от пропускной способности интернет-канала пользователей.

Было разработано и представлено несколько решений по оптимизации работы самой библиотеки «AppRTC» и отправлено разработчикам.

Теги: #iOS #webrtc #сборка велосипедов #Разработка для iOS
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.