API WebRTC
WebRTC (Веб-реальная передача данных) — технология, которая позволяет веб-приложениям и сайтам захватывать и (по желанию) передавать аудио и/или видеопоток, а также обмениваться произвольными данными между браузерами без необходимости посредника. Набор стандартов, составляющих WebRTC, позволяет обмениваться данными и проводить видеоконференции по принципу «точка-точка» без необходимости установки плагинов или другого стороннего программного обеспечения.
WebRTC состоит из нескольких взаимосвязанных API и протоколов, которые работают вместе для достижения этой цели. Данная документация поможет вам понять основы WebRTC, как настроить и использовать как каналы передачи данных, так и каналы передачи медиа-данных.
Концепции и использование WebRTC
WebRTC служит для множества целей; вместе с API захвата медиа и потоков они предоставляют мощные мультимедийные возможности для Веба, включая поддержку аудио- и видеоконференций, обмена файлами, совместного доступа к экрану, управления идентификацией и взаимодействия с устаревшими телефонными системами, включая поддержку отправки DTMF (сигналы набора тонального набора). Подключения между участниками могут устанавливаться без необходимости специальных драйверов или плагинов и часто могут устанавливаться без участия промежуточных серверов.
Подключения между двумя участниками представлены интерфейсом RTCPeerConnection. После установления и открытия подключения с помощью RTCPeerConnection, к подключению могут быть добавлены медиапотоки (MediaStream) и/или каналы данных (RTCDataChannel).
Медиапотоки могут состоять из любого количества потоков медиаинформации; потоки, которые представлены объектами на основе интерфейса MediaStreamTrack, могут содержать один из нескольких типов медиаданных, включая аудио, видео и текст (например, субтитры или даже названия глав). Большинство потоков состоят как минимум из одного аудиопотока и, вероятно, также видеопотока и могут использоваться для отправки и получения как живого медиа, так и сохранённой медиаинформации (например, потокового фильма).
Вы также можете использовать подключение между двумя участниками для обмена произвольными двоичными данными, используя интерфейс RTCDataChannel. Это может быть использовано для каналов обратной связи, обмена метаданными, пакетов состояния игры, передачи файлов или даже в качестве основного канала для передачи данных.
Совместимость
WebRTC в целом хорошо поддерживается современными браузерами, но некоторые несовместимости остаются. Библиотека adapter.js — это обходной механизм для изоляции приложений от этих несовместимостей.
Справочник WebRTC
Поскольку WebRTC предоставляет интерфейсы, которые работают вместе для выполнения различных задач, мы разделили справочник по категориям. Справочник по алфавитному списку категорий находится в боковой панели.
Настройка и управление подключением
Эти интерфейсы, словари и типы используются для настройки, открытия и управления соединениями WebRTC. Включаются интерфейсы, представляющие соединения медиа-партнёров, каналы данных и интерфейсы, используемые при обмене информацией о возможностях каждого партнёра, чтобы выбрать наилучшую конфигурацию для двустороннего медиа-соединения.
Интерфейсы
RTCPeerConnection-
Представляет соединение WebRTC между локальным компьютером и удалённым партнёром. Используется для обработки эффективной потоковой передачи данных между двумя партнёрами.
RTCDataChannel-
Представляет двунаправленный канал данных между двумя партнёрами соединения.
RTCDataChannelEvent-
Представляет события, происходящие при подключении
RTCDataChannelкRTCPeerConnection. Единственным событием, отправленным с помощью этого интерфейса, являетсяdatachannel. RTCSessionDescription-
Представляет параметры сессии. Каждый
RTCSessionDescriptionсостоит из описанияtype, указывающего на ту часть процесса переговоров offer/answer, которую он описывает, и описателя сессии SDP. RTCStatsReport-
Предоставляет подробную статистическую информацию для соединения или для отдельного тракта в соединении; отчёт можно получить, вызвав
RTCPeerConnection.getStats(). RTCIceCandidate-
Представляет кандидата сервера Interactive Connectivity Establishment (ICE) для установления
RTCPeerConnection. RTCIceTransport-
Представляет информацию об ICE-транспорте.
RTCPeerConnectionIceEvent-
Представляет события, связанные с ICE-кандидатами с целевым объектом, обычно
RTCPeerConnection. Только одно событие такого типа:icecandidate. RTCRtpSender-
Управляет кодированием и передачей данных для
MediaStreamTrackвRTCPeerConnection. RTCRtpReceiver-
Управляет приёмом и декодированием данных для
MediaStreamTrackвRTCPeerConnection. RTCTrackEvent-
Интерфейс, используемый для представления события
track, которое указывает на добавление объектаRTCRtpReceiverк объектуRTCPeerConnection, указывая на создание и добавление нового входящегоMediaStreamTrackкRTCPeerConnection. RTCSctpTransport-
Предоставляет информацию, описывающую транспортный протокол Stream Control Transmission Protocol (SCTP), а также способ доступа к базовому транспорту Datagram Transport Layer Security (DTLS), по которому отправляются и принимаются SCTP-пакеты для всех каналов данных
RTCPeerConnection.
События
bufferedamountlow-
Объем данных, в настоящее время буферизуемых каналом данных (как указано его свойством
bufferedAmount), уменьшился до значения, равного или ниже минимального размера буферизованных данных канала, указанного вbufferedAmountLowThreshold. close-
Канал данных завершил процесс закрытия и теперь находится в состоянии
closed. В этот момент его базовый транспорт данных полностью закрыт. Вы можете получить уведомление *до* завершения закрытия, наблюдая за событиемclosingвместо этого. closing-
RTCDataChannelперешёл в состояниеclosing, что означает, что он будет закрыт вскоре. Вы можете определить завершение процесса закрытия, наблюдая за событиемclose. connectionstatechange-
Изменилось состояние соединения, к которому можно получить доступ через
connectionState. datachannel-
Новый
RTCDataChannelдоступен после того, как удалённый партнёр открыл новый канал данных. Тип этого события —RTCDataChannelEvent. error-
RTCErrorEventуказывает, что произошла ошибка в канале данных. error-
RTCErrorEventуказывает, что произошла ошибка вRTCDtlsTransport. Эта ошибка будет либоdtls-failure, либоfingerprint-failure. gatheringstatechange-
Изменилось состояние сбора
RTCIceTransport. icecandidate-
RTCPeerConnectionIceEvent, которое отправляется всякий раз, когда локальное устройство идентифицирует новый ICE-кандидат, который необходимо добавить к локальному партнёру, вызвавsetLocalDescription(). icecandidateerror-
RTCPeerConnectionIceErrorEventуказывает, что произошла ошибка при сборе ICE-кандидатов. iceconnectionstatechange-
Отправляется в
RTCPeerConnection, когда изменяется состояние ICE-соединения, находящееся в свойствеiceConnectionState. icegatheringstatechange-
Отправляется в
RTCPeerConnection, когда изменяется состояние сбора ICE, находящееся в свойствеiceGatheringState. message-
По каналу данных получено сообщение. Тип события —
MessageEvent. negotiationneeded-
Уведомляет
RTCPeerConnection, что необходимо выполнить переговор сессии, вызвавcreateOffer(), за которым следуетsetLocalDescription(). open-
Базовый транспорт данных для
RTCDataChannelбыл успешно открыт или повторно открыт. selectedcandidatepairchange-
Изменилась текущая пара выбранных ICE-кандидатов для
RTCIceTransport, на котором было вызвано событие. track-
Событие
track, типаRTCTrackEvent, отправляется вRTCPeerConnection, когда новый трек добавляется к соединению после успешной настройки потоковой передачи медиа. signalingstatechange-
Отправляется в соединение партнёров, когда изменилось его
signalingState. Это происходит в результате вызоваsetLocalDescription()илиsetRemoteDescription(). statechange-
Изменилось состояние
RTCDtlsTransport. statechange-
Изменилось состояние
RTCIceTransport. statechange-
Изменилось состояние
RTCSctpTransport. rtctransform-
Кодированный видео- или аудиокадр готов к обработке с помощью потока преобразования в рабочем процессе.
Типы
RTCSctpTransport.state-
Указывает состояние экземпляра
RTCSctpTransport.
Идентификация и безопасность
Эти API используются для управления идентификацией и безопасностью пользователя, чтобы выполнить аутентификацию пользователя для подключения.
RTCIdentityProvider-
Позволяет агенту пользователя запросить генерацию или валидацию утверждения об идентификации.
RTCIdentityAssertion-
Представляет идентификацию удалённого участника текущего подключения. Если участник ещё не задан и не проверен, этот интерфейс возвращает
null. После задания он не может быть изменён. RTCIdentityProviderRegistrar-
Регистрирует поставщика идентификации (idP).
RTCCertificate-
Представляет сертификат, который использует
RTCPeerConnectionдля аутентификации.
Телефония
Эти интерфейсы и события связаны с взаимодействием с общедоступными коммутируемыми телефонными сетями (PSTN). Они в основном используются для отправки звуков тонального набора — или пакетов, представляющих эти тона, — по сети удалённому участнику.
Интерфейсы
RTCDTMFSender-
Управляет кодированием и передачей сигналов двойного тона многочастотного сигналинга (DTMF) для
RTCPeerConnection. RTCDTMFToneChangeEvent-
Используется событием
tonechangeдля указания того, что тон DTMF либо начался, либо закончился. Это событие не распространяется (за исключением случаев, где это указано отдельно) и не может быть отменено (за исключением случаев, где это указано отдельно).
События
tonechange-
Начинается воспроизведение нового тона DTMF по подключению или последний тон в буфере тонов
toneBufferотправлен, и буфер теперь пуст. Тип события —RTCDTMFToneChangeEvent.
Кодированные преобразования
Эти интерфейсы и события используются для обработки входящих и исходящих закодированных видео- и аудиокадров с помощью потока преобразования, работающего в рабочем потоке.
Интерфейсы
RTCRtpScriptTransform-
Интерфейс для вставки потока преобразования(ий), работающего(их) в рабочем потоке, в конвейер RTC.
RTCRtpScriptTransformer-
Рабочая сторона интерфейса
RTCRtpScriptTransform, которая передает параметры с основного потока, а также потоки чтения и записи, которые могут быть использованы для передачи кодированных кадров черезTransformStream. RTCEncodedVideoFrame-
Представляет закодированный видеокадр, который должен быть преобразован в конвейере RTC.
RTCEncodedAudioFrame-
Представляет закодированный аудиокадр, который должен быть преобразован в конвейере RTC.
Свойства
RTCRtpReceiver.transform-
Свойство, используемое для вставки потока преобразования в конвейер приёмника для входящих закодированных видео- и аудиокадров.
RTCRtpSender.transform-
Свойство, используемое для вставки потока преобразования в конвейер отправителя для исходящих закодированных видео- и аудиокадров.
События
rtctransform-
Преобразование RTC готово к запуску в рабочем потоке или закодированный видео- или аудиокадр готов к обработке.
Руководства
- Введение в протоколы WebRTC
-
В этой статье представлены протоколы, на основе которых построен API WebRTC.
- Подключение WebRTC
-
Руководство по работе подключений WebRTC и тому, как различные протоколы и интерфейсы могут использоваться вместе для создания мощных приложений для связи.
- Жизненный цикл сессии WebRTC
-
WebRTC позволяет создавать приложения для браузера, осуществляющие обмен данными, аудио или видео (или любой комбинацией) между равными. В этой статье мы рассмотрим жизненный цикл сессии WebRTC, от установления соединения до его закрытия, когда оно больше не требуется.
- Установление соединения: идеальная схема переговоров
-
Идеальная схема переговоров — рекомендуемая схема для вашего процесса сигнализации, обеспечивающая прозрачность переговоров, позволяющая обеим сторонам быть инициатором или отвечающим без значительных кодировочных усилий для различения этих ролей.
- Сигнализация и двухсторонняя видеосвязь
-
Учебное пособие и пример, которые преобразуют систему чата на основе WebSocket, созданную для предыдущего примера, и добавляют поддержку открытия видеозвонков между участниками. Подключение WebSocket сервера чата используется для сигнализации WebRTC.
- Кодеки, используемые в WebRTC
-
Руководство по кодекам, которые браузеры должны поддерживать, а также по дополнительным кодекам, поддерживаемым различными популярными браузерами. Включает руководство для выбора лучших кодеков для ваших потребностей.
- Использование каналов данных WebRTC
-
Это руководство описывает, как использовать соединение с равным и связанным с ним
RTCDataChannelдля обмена произвольными данными между двумя равными. - Использование DTMF с WebRTC
-
Поддержка WebRTC для взаимодействия с шлюзами, которые подключаются к старым телефонным системам, включает поддержку отправки тонов DTMF с помощью интерфейса
RTCDTMFSender. Это руководство показывает, как это сделать. - Использование кодированных преобразований WebRTC
-
Это руководство показывает, как веб-приложение может изменять входящие и исходящие кодированные кадры видео и аудио WebRTC, используя
TransformStream, работающий в рабочем потоке.
Учебники
- Улучшение совместимости с помощью WebRTC adapter.js
-
Организация WebRTC предоставляет на GitHub адаптер WebRTC для решения проблем совместимости в различных реализациях WebRTC в разных браузерах. Адаптер — это JavaScript-заглушка, которая позволяет писать код по спецификации таким образом, чтобы он работал во всех браузерах, поддерживающих WebRTC.
- Простой пример RTCDataChannel
-
Интерфейс
RTCDataChannel— это функция, которая позволяет открыть канал между двумя равными, по которому вы можете отправлять и получать произвольные данные. API умышленно похож на API WebSocket API, чтобы можно было использовать одну и ту же модель программирования для каждого. - Создание подключённого к интернету телефона с помощью Peer.js
-
Этот учебник — пошаговое руководство по созданию телефона с помощью Peer.js
Спецификации
| Спецификация |
|---|
| WebRTC: реальное общение в браузерах |
| Захват медиа и потоки |
| Захват медиа из элементов DOM |
Протоколы WebRTC
Дополнительные поддерживающие протоколы
- Установление интерактивного соединения (ICE): протокол для прохождения через NAT для протокола предложение/ответ
- Служебные утилиты для прохождения NAT (STUN)
- Схема URI для протокола STUN
- Прохождение через посредников NAT (TURN) URI
- Модель предложение/ответ с протоколом описания сеанса (SDP)
- Расширение STUN для авторизации третьих сторон
См. также
MediaDevicesMediaStreamEventMediaStreamTrackMessageEventMediaStream- API захвата и потоков медиа
- Firefox многопотоковая передача и переподключение для Jitsi Videobridge
- Проникновение сквозь туман WebRTC с помощью SocketPeer
- Внутри автобуса вечеринки: создание веб-приложения с несколькими потоками живого видео + интерактивной графикой
- Веб-технологии медиа
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API