Есть ли опыт работы с WebRTC
Что проверяют
Работали ли вы с медиа в реальном времени на iOS руками или только слышали о технологии. Следом почти всегда спрашивают, как соединение проходит через NAT и как звонок живёт, когда приложение свёрнуто или экран заблокирован.
Как отвечать
Если опыт был, стройте ответ вокруг проекта: какие звонки (один на один или групповые), какая библиотека, какие проблемы решали. Технический каркас:
- библиотека:
getUserMediaна iOS нет, работают с нативной сборкой libwebrtc. Официальный под от Google давно не обновляется, поэтому берут свою сборку, пакет сообщества или SDK поверх WebRTC, например LiveKit; - соединение:
RTCPeerConnection, обмен SDP offer/answer и ICE-кандидатами. Сигналинг в стандарт не входит, его пишут сами, обычно на WebSocket; - NAT: STUN узнаёт внешний адрес, TURN ретранслирует трафик, когда прямое соединение не получается. Свой TURN чаще всего поднимают на coturn;
- топология: mesh годится для двух-трёх участников, для групп нужен SFU (LiveKit, mediasoup, Janus), иначе телефон не вытянет исходящие потоки на каждого;
- интеграция с системой:
CallKitдля системного экрана звонка, VoIP-пуши черезPushKit, настройкаAVAudioSessionчерезRTCAudioSession, фоновый режимaudio. Входящий VoIP-пуш нужно сразу передать вCallKit, иначе система завершит приложение, а при повторах перестанет доставлять такие пуши.
Демонстрация экрана делается через ReplayKit и Broadcast Upload Extension с жёстким лимитом памяти. Если вы в это упирались, обязательно расскажите.
Если опыта нет, скажите прямо и покажите смежное: AVFoundation, WebSocket, фоновые режимы. Можно добавить, что разбирали архитектуру WebRTC и собирали тестовый звонок между двумя устройствами, если это правда.
Где спотыкаются
Считают WebRTC чистым P2P без серверов. На практике нужны сигналинг, TURN и чаще всего SFU.
Не знают про требования к VoIP-пушам и CallKit, а это первое, что ломается при переходе от прототипа к продакшену.
Забывают про аудиосессию: звук внезапно уходит в разговорный динамик, прерывается другим приложением или конфликтует с Bluetooth-гарнитурой.