RTCPeerConnection
Базовая Широко доступная *
Эта функция хорошо отработана и работает на многих устройствах и версиях браузера. Она доступна во всех браузерах с января 2020 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Интерфейс RTCPeerConnection представляет собой подключение WebRTC между локальным компьютером и удалённым узлом. Он предоставляет методы для подключения к удалённому узлу, поддержания и мониторинга подключения, а также закрытия подключения, когда оно больше не требуется.
Конструктор
RTCPeerConnection()-
Возвращает новый
RTCPeerConnection, представляющий собой соединение между локальным устройством и удалённым узлом.
Свойства экземпляра
Также наследует свойства от EventTarget.
-
canTrickleIceCandidatesТолько для чтения -
Возвращает значение boolean, указывающее, может ли удалённый узел принимать каскадные ICE-кандидаты.
-
connectionStateТолько для чтения -
Указывает текущее состояние подключения peer, возвращая одну из строк:
new,connecting,connected,disconnected,failed, илиclosed. -
currentLocalDescriptionТолько для чтения -
Возвращает объект
RTCSessionDescription, описывающий локальный конец соединения, как он был последним успешно согласован с момента последнего завершения переговоров и подключения к удалённому узлу этимRTCPeerConnection. Также включает список любых ICE-кандидатов, которые могли быть сгенерированы агентом ICE с момента первоначальной инициализации предложения или ответа, представленных описанием. -
currentRemoteDescriptionТолько для чтения -
Возвращает объект
RTCSessionDescription, описывающий удалённый конец соединения, как он был последним успешно согласован с момента последнего завершения переговоров и подключения к удалённому узлу этимRTCPeerConnection. Также включает список любых ICE-кандидатов, которые могли быть сгенерированы агентом ICE с момента первоначальной инициализации предложения или ответа, представленных описанием. -
iceConnectionStateТолько для чтения -
Возвращает строку, которая описывает состояние агента ICE, связанного с этим RTCPeerConnection. Она может иметь следующие значения:
new,checking,connected,completed,failed,disconnected, илиclosed. -
iceGatheringStateТолько для чтения -
Возвращает строку, описывающую состояние сбора ICE-кандидатов подключения. Это позволяет, например, определить, когда завершился сбор ICE-кандидатов. Возможные значения:
new,gathering, илиcomplete. -
localDescriptionТолько для чтения -
Возвращает
RTCSessionDescription, описывающий сеанс для локального конца соединения. Если он ещё не установлен, возвращаетnull. -
peerIdentityТолько для чтения -
Возвращает
Promise, который разрешается вRTCIdentityAssertion, содержащую строку, идентифицирующую удалённый узел. После успешного разрешения этой промисы, полученная идентичность является идентичностью целевого узла и не будет изменяться на протяжении всего подключения. -
pendingLocalDescriptionТолько для чтения -
Возвращает объект
RTCSessionDescription, описывающий ожидаемое изменение конфигурации для локального конца соединения. Это не описывает соединение в текущем состоянии, а то, каким оно может быть в ближайшем будущем. -
pendingRemoteDescriptionТолько для чтения -
Возвращает объект
RTCSessionDescription, описывающий ожидаемое изменение конфигурации для удалённого конца соединения. Это не описывает соединение в текущем состоянии, а то, каким оно может быть в ближайшем будущем. -
remoteDescriptionТолько для чтения -
Возвращает объект
RTCSessionDescription, описывающий сеанс, включая конфигурацию и информацию о медиа, для удалённого конца соединения. Если он ещё не задан, возвращаетnull. -
sctpТолько для чтения -
Возвращает объект
RTCSctpTransport, описывающий транспортный уровень SCTP, по которому отправляются и принимаются данные SCTP. Если SCTP не был согласован, это значение равноnull. -
signalingStateТолько для чтения -
Возвращает строку, описывающую состояние процесса сигнализации на локальном конце подключения во время подключения или повторного подключения к другому узлу. Это одно из следующих значений:
stable,have-local-offer,have-remote-offer,have-local-pranswer,have-remote-pranswer, илиclosed.
Статические методы
RTCPeerConnection.generateCertificate()-
Создаёт сертификат X.509 и соответствующий ему закрытый ключ, возвращая
Promise, который разрешается с новымRTCCertificateпосле его генерации.
Методы экземпляра
Также наследует методы от EventTarget.
addIceCandidate()-
Добавляет новый удалённый кандидат в удалённое описание
RTCPeerConnection, которое описывает состояние удалённого конца соединения. addTrack()-
Добавляет новый
MediaStreamTrackв набор потоков, которые будут переданы другому участнику. addTransceiver()-
Создаёт новый
RTCRtpTransceiverи добавляет его в набор трансиверов, связанных с соединением. Каждый трансивер представляет двунаправленный поток, с соответствующимRTCRtpSenderиRTCRtpReceiver. close()-
Закрывает текущее соединение с удалённым участником.
createAnswer()-
Инициализирует создание ответа SDP на полученное предложение от удалённого участника во время переговоров предложение/ответ в соединении WebRTC. Ответ содержит информацию о любых медиа, уже присоединённых к сессии, кодеках и опциях, поддерживаемых браузером, и любых ICE кандидатах, уже собранных.
createDataChannel()-
Инициализирует создание нового канала, связанного с удалённым участником, по которому может передаваться любой тип данных. Это может быть полезно для сторонней информации, такой как изображения, передача файлов, текстовый чат, пакеты обновлений игры и так далее.
createOffer()-
Инициализирует создание предложения SDP для начала нового соединения WebRTC с удалённым участником. Предложение SDP включает информацию о любых
MediaStreamTrackобъектах, уже подключенных к сессии WebRTC, кодеках и опциях, поддерживаемых браузером, а также о любых кандидатах, уже собранных агентом ICE для отправки по каналу сигнализации потенциальному участнику для запроса подключения или для обновления конфигурации существующего соединения. getConfiguration()-
Возвращает объект, который указывает текущую конфигурацию соединения.
getIdentityAssertion()-
Инициализирует сбор утверждения идентичности и возвращает
Promise, который разрешается в утверждение идентичности, закодированное как строка. Это оказывает влияние только в том случае, еслиsignalingStateнеclosed. getReceivers()-
Возвращает массив объектов
RTCRtpReceiver, каждый из которых представляет один приёмник RTP. getSenders()-
Возвращает массив объектов
RTCRtpSender, каждый из которых представляет отправителя RTP, ответственного за передачу данных одного потока. getStats()-
Возвращает
Promise, который разрешается данными, предоставляющими статистику либо по всему соединению, либо по указанномуMediaStreamTrack. getTransceivers()-
Возвращает список всех объектов
RTCRtpTransceiver, используемых для отправки и получения данных по соединению. removeTrack()-
Указывает локальному концу соединения прекратить отправку медиа из указанного потока, не удаляя фактически соответствующий
RTCRtpSenderиз списка отправителей, как показано вgetSenders(). Если поток уже остановлен или не входит в список отправителей соединения, этот метод не оказывает влияния. restartIce()-
Позволяет легко запросить повторный сбор ICE кандидатов на обоих концах соединения. Это упрощает процесс, позволяя одному и тому же методу быть использованным как вызывающей стороной, так и стороной, принимающей вызов, для запуска перезапуска ICE.
setConfiguration()-
Устанавливает текущую конфигурацию соединения на основе значений, включённых в указанный объект. Это позволяет изменять ICE серверы, используемые соединением, и политики транспортировки.
setIdentityProvider()-
Устанавливает поставщика идентификации (IdP) в тройку, заданную в параметре: его имя, протокол, используемый для связи с ним, и имя пользователя. Протокол и имя пользователя являются необязательными.
setLocalDescription()-
Изменяет локальное описание, связанное с соединением. Это описание определяет свойства локального конца соединения, включая формат медиа. Возвращает
Promise, который выполняется после асинхронного изменения описания. setRemoteDescription()-
Устанавливает указанное описание сессии как текущее предложение или ответ удалённого участника. Описание определяет свойства удалённого конца соединения, включая формат медиа. Возвращает
Promise, который выполняется после асинхронного изменения описания.
Методы, устаревшие
-
addStream()Устаревший Нестандартный -
Добавляет
MediaStreamкак локальный источник аудио или видео. Вместо использования этого устаревшего метода, используйтеaddTrack()для каждого потока, который вы хотите отправить удалённому участнику. -
createDTMFSender()Устаревший Нестандартный -
Создаёт новый
RTCDTMFSender, связанный с конкретнымMediaStreamTrack, который сможет отправлять DTMF сигналы по соединению. -
removeStream()Устаревший Нестандартный -
Удаляет
MediaStreamкак локальный источник аудио или видео. Вместо этого используйтеremoveTrack().
События
Прослушивайте эти события с помощью addEventListener() или назначив обработчик событий к свойству oneventname этого интерфейса.
connectionstatechange-
Отправляется, когда изменяется общий статус подключения к
RTCPeerConnection. datachannel-
Отправляется, когда удалённый участник добавляет
RTCDataChannelк подключению. icecandidate-
Отправляется для запроса передачи указанного кандидата удалённому участнику.
icecandidateerror-
Отправляется в подключение, если во время сбора кандидатов ICE произошла ошибка. Событие описывает ошибку.
iceconnectionstatechange-
Отправляется, когда изменяется состояние подключения ICE, например, при отключении.
icegatheringstatechange-
Отправляется, когда изменяется состояние сбора ICE слоя, отражённое в
iceGatheringState. Это указывает, началась ли ICE-независимая проверка (new), началось ли собирание кандидатов (gathering) или процесс завершён (complete). negotiationneeded-
Отправляется, когда требуется выполнить согласование или повторное согласование подключения ICE; это может произойти как при первом открытии подключения, так и при необходимости адаптации к изменяющимся сетевым условиям. Получатель должен ответить, создав предложение и отправив его другому участнику.
signalingstatechange-
Отправляется, когда изменяется состояние сигнализации ICE подключения.
track-
Отправляется после добавления нового трека в один из
RTCRtpReceiverэкземпляров, составляющих подключение.
Устаревшие события
-
addstreamУстаревшее Нестандартное -
Отправляется, когда к подключению добавлен новый
MediaStream. Вместо прослушивания этого устаревшего события, следует прослушивать событияtrack; одно событие отправляется для каждогоMediaStreamTrackдобавленного к подключению. -
removestreamУстаревшее Нестандартное -
Отправляется, когда
MediaStreamудаляется из подключения. Вместо прослушивания этого устаревшего события, следует прослушивать событияremovetrackна каждом потоке.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
RTCPeerConnection |
56До Chrome 63, значением параметраconfiguration.rtcpMuxPolicy по умолчанию было "negotiate" вместо "required". |
1515 | 4422 |
43До Opera 50, значением параметраconfiguration.rtcpMuxPolicy по умолчанию было "negotiate" вместо "required". |
11 |
56До Chrome Android 63, значением параметраconfiguration.rtcpMuxPolicy по умолчанию было "negotiate" вместо "required". |
4424 |
43До Opera Android 46, значением параметраconfiguration.rtcpMuxPolicy по умолчанию было "negotiate" вместо "required". |
11 |
6.0До Samsung Internet 8.0, значением параметраconfiguration.rtcpMuxPolicy по умолчанию было "negotiate" вместо "required". |
56До WebView Android 63, значением параметраconfiguration.rtcpMuxPolicy по умолчанию было "negotiate" вместо "required". |
|---|---|---|---|---|---|---|---|---|---|---|---|
RTCPeerConnection |
5623 | 1515 | 4422 | 4315 | 11 | 5625 | 4424 | 4314 | 11 | 6.01.5 | 564.4 |
addIceCandidate |
24 | 15 | 22Начиная с Firefox 68, параметрcandidate является необязательным при вызове addIceCandidate(). Значение null для candidate указывает на то, что больше кандидатов отправляться не будет, а пустая строка candidate указывает, что больше кандидатов отправляться не будет для текущего поколения кандидатов. |
15 | 11 | 25 | 24Начиная с Firefox 68, параметрcandidate является необязательным при вызове addIceCandidate(). Значение null для candidate указывает на то, что больше кандидатов отправляться не будет, а пустая строка candidate указывает, что больше кандидатов отправляться не будет для текущего поколения кандидатов. |
14 | 11 | 1.5 | 4.4 |
addStream |
24 | 15 | 22 | 15 | 11–12 | 25 | 24 | 14 | 11–12 | 1.5 | ≤37 |
addTrack |
64 | 79 | 22 | 51 | 11 | 64 | 24 | 47 | 11 | 9.0 | 64 |
addTransceiver |
69 | 79 | 59 | 56 | 11 | 69 | 59 | 48 | 11 | 10.0 | 69 |
addstream_event |
24 | 15 | 22 | 15 | Нет | 25 | 24 | 14 | Нет | 1.5 | ≤37 |
canTrickleIceCandidates |
83 | 8315–79 | 47 | 69 | 15.4 | 83 | 47 | 59 | 15.4 | 13.0 | 83 |
close |
23 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
connectionState |
72 | 79 | 113 | 60 | 11 | 72 | 113 | 51 | 11 | 11.0 | 72 |
connectionstatechange_event |
72 | 79 | 113 | 60 | 11 | 72 | 113 | 51 | 11 | 11.0 | 72 |
createAnswer |
24 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
createDTMFSender |
27 | 79 | Нет | 15 | Нет | 27 | Нет | 15 | Нет | 1.5 | 4.4 |
createDataChannel |
24 | 79 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
createOffer |
24 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
currentLocalDescription |
70 | 79 | 22 | 57 | 11 | 70 | 24 | 49 | 11 | 10.0 | 70 |
currentRemoteDescription |
70 | 79 | 57 | 57 | 11 | 70 | 57 | 49 | 11 | 10.0 | 70 |
datachannel_event |
25 | 79 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
generateCertificate_static |
48 | 79 | 22 | 35 | 12.1 | 48 | 24 | 35 | 12.2 | 6.0 | 48 |
getConfiguration |
70 | 15 | 22 | 57 | 11 | 70 | 24 | 49 | 11 | 10.0 | 70 |
getIdentityAssertion |
Нет | ≤18–79 | 40 | Нет | Нет | Нет | 40 | Нет | Нет | Нет | Нет |
getLocalStreams |
27 | 15 | 24 | 15 | 11–12 | 27 | 24 | 15 | 11–12 | 1.5 | ≤37 |
getReceivers |
59 | 79 | 34 | 46 | 11 | 59 | 34 | 43 | 11 | 6.0 | 59 |
|---|---|---|---|---|---|---|---|---|---|---|---|
getRemoteStreams |
27 | 15 | 24 | 15 | 11–12 | 27 | 24 | 15 | 11–12 | 1.5 | ≤37 |
getSenders |
64 | 79 | 34 | 51 | 11 | 64 | 34 | 47 | 11 | 6.0 | 64 |
getStats |
24 | 15 | 27 | 15 | 11 | 25 | 27 | 14 | 11 | 1.5 | 4.4 |
getTransceivers |
69 | 79 | 59 | 56 | 11 | 69 | 59 | 48 | 11 | 10.0 | 79 |
iceConnectionState |
26 | 15 | 24 | 15 | 11 | 26 | 24 | 14 | 11 | 1.5 | 4.4 |
iceGatheringState |
25 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
icecandidate_event |
24 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
icecandidateerror_event |
77 | 79 | Нет | 64 | 14.1 | 77 | Нет | 55 | 14.5 | 12.0 | 77 |
iceconnectionstatechange_event |
28 | 15 | 24 | 15 | 11 | 28 | 24 | 15 | 11 | 1.5 | 4.4 |
icegatheringstatechange_event |
59 | 15 | 22 | 46 | 11 | 59 | 24 | 43 | 11 | 7.0 | 59 |
idpLoginUrl |
Нет | Нет | 40 | Нет | Нет | Нет | 40 | Нет | Нет | Нет | Нет |
localDescription |
24 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
negotiationneeded_event |
24 | 15 | 3824–38Хотя свойствоonnegotiationneeded поддерживается, событие negotiationneeded никогда не срабатывает. |
15 | 11 | 25 | 3824–38Хотя свойствоonnegotiationneeded поддерживается, событие negotiationneeded никогда не срабатывает. |
14 | 11 | 1.5 | 4.4 |
peerIdentity |
Нет | ≤18–79 | 40 | Нет | Нет | Нет | 40 | Нет | Нет | Нет | Нет |
pendingLocalDescription |
70 | 79 | 22 | 57 | 11 | 70 | 24 | 49 | 11 | 10.0 | 70 |
pendingRemoteDescription |
70 | 79 | 22 | 57 | 11 | 70 | 24 | 49 | 11 | 10.0 | 70 |
remoteDescription |
24 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
removeStream |
24 | 15 | 22–51 | 15 | 11–12 | 25 | 24–51 | 14 | 11–12 | 1.5 | ≤37 |
removeTrack |
64 | 79 | 22 | 51 | 11 | 64 | 24 | 47 | 11 | 6.0 | 64 |
removestream_event |
24 | 15 | 22–60 | 15 | Нет | 25 | 24–60 | 14 | Нет | 1.5 | ≤37 |
restartIce |
77 | 79 | 70 | 64 | 14.1 | 77 | 79 | 55 | 14.5 | 12.0 | 77 |
sctp |
76 | 79 | 113 | 63 | 15.4 | 76 | 113 | 54 | 15.4 | 12.0 | 76 |
setConfiguration |
48 | 79 | 99 | 35 | 11 | 48 | 99 | 35 | 11 | 6.0 | 48 |
setIdentityProvider |
Нет | ≤18–79 | 40 | Нет | Нет | Нет | 40 | Нет | Нет | Нет | Нет |
setLocalDescription |
24 | 15 | 22Firefox не поддерживает описания типаpranswer. |
15 | 11 | 25 | 24Firefox не поддерживает описания типаpranswer. |
14 | 11 | 1.5 | 4.4 |
|---|---|---|---|---|---|---|---|---|---|---|---|
setRemoteDescription |
24 | 15 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
signalingState |
26 | 15 | 24 | 15 | 11 | 26 | 24 | 14 | 11 | 1.5 | 4.4 |
signalingstatechange_event |
28 | 15 | 3624–36Несмотря на поддержку свойстваonsignalingstatechange, событие signalingstatechange не генерируется как объект Event. См. ошибку 1075133. |
15 | 11 | 28 | 3624–36Несмотря на поддержку свойстваonsignalingstatechange, событие signalingstatechange не генерируется как объект Event. См. ошибку 1075133. |
15 | 11 | 1.5 | 4.4 |
track_event |
64 | 79 | 22 | 43 | 11 | 64 | 24 | 43 | 11 | 6.0 | 64 |
См. также
- https://github.com/jesup/nightly-gupshup/blob/master/static/js/chat.js
- Начало работы с WebRTC
- TutorRoom: приложение для обмена видео и файлами по технологии peer-to-peer и захвата видео с помощью Node.js HTML (исходный код на GitHub)
© 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/RTCPeerConnection