RTCDtlsTransport
Базовая Широко доступная *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Интерфейс RTCDtlsTransport предоставляет доступ к информации о транспорте протокола Datagram Transport Layer Security (DTLS), по которому пакеты RTCPeerConnection RTP и RTCP отправляются и принимаются его объектами RTCRtpSender и RTCRtpReceiver.
Объект RTCDtlsTransport также используется для предоставления информации о пакетах SCTP, передаваемых и принимаемых каналами данных подключения каналов данных.
Функции транспорта DTLS включают добавление безопасности к базовому транспорту; интерфейс RTCDtlsTransport может использоваться для получения информации о базовом транспорте и добавленной безопасности, обеспечиваемой слоем DTLS.
Свойства экземпляра
Также наследует свойства от EventTarget.
-
iceTransportТолько для чтения -
Возвращает ссылку на базовый объект
RTCIceTransport. -
stateТолько для чтения -
Возвращает строку, описывающую состояние базового транспорта протокола Datagram Transport Layer Security (DTLS). Может принимать следующие значения:
new,connecting,connected,closed, илиfailed.
Методы экземпляра
Также наследует методы от EventTarget.
getRemoteCertificates()-
Возвращает массив
ArrayBuffer, содержащий сертификаты удаленного участника подключения.
События
error-
Отправляется при возникновении ошибки на уровне транспорта в
RTCPeerConnection. statechange-
Отправляется при изменении состояния
stateтранспорта DTLS.
Описание
Распределение транспортов DTLS
Объекты RTCDtlsTransport создаются, когда приложение вызывает либо setLocalDescription(), либо setRemoteDescription(). Количество созданных транспортов DTLS и способ их использования зависят от режима объединения, используемого при создании RTCPeerConnection.
Используется ли объединение, зависит от того, что другой участник может договориться. Все браузеры поддерживают объединение, поэтому когда оба участника — браузеры, можно быть уверенным, что будет использовано объединение.
Однако некоторые устаревшие конечные точки, не являющиеся браузерами, могут не поддерживать объединение. Чтобы иметь возможность договориться с такими конечными точками (или полностью исключить их), при создании подключения может быть указано свойство bundlePolicy. Свойство bundlePolicy позволяет управлять тем, как договариваться с этими устаревшими конечными точками. По умолчанию используется политика "balanced", которая обеспечивает баланс между производительностью и совместимостью.
Например, чтобы создать подключение с максимальным уровнем объединения:
const rtcConfig = {
bundlePolicy: "max-bundle",
};
const pc = new RTCPeerConnection(rtcConfig);
Объединение позволяет использовать один RTCDtlsTransport для переноса данных для нескольких транспортов более высокого уровня, таких как несколько RTCRtpTransceiver.
Когда не используется BUNDLE
Когда подключение создается без использования BUNDLE, каждый компонент RTP или RTCP каждого RTCRtpTransceiver имеет свой собственный RTCDtlsTransport; то есть каждый RTCRtpSender и RTCRtpReceiver имеет свой собственный транспорт, и все объекты RTCDataChannel используют отдельный транспорт, предназначенный для SCTP.
Когда используется BUNDLE
Когда подключение использует BUNDLE, каждый объект RTCDtlsTransport представляет собой группу объектов RTCRtpTransceiver. Если подключение было создано в режиме max-compat, каждый транспорт отвечает за обработку всех сообщений для определенного типа медиа (аудио, видео или канала данных). Таким образом, подключение с любым количеством аудио- и видеоканалов всегда будет иметь ровно один транспорт DTLS для аудио- и один для видеосвязи.
Поскольку транспорты устанавливаются на ранней стадии процесса переговоров, скорее всего, до их создания не будет известно, поддерживает ли удалённый участник объединение. По этой причине иногда сначала создаются отдельные транспорты для каждого трека, а затем они объединяются, когда станет известно, что объединение возможно. Если ваш код напрямую обращается к RTCRtpSender и/или RTCRtpReceiver, вы можете столкнуться с ситуациями, когда они первоначально разделены, а затем половина или больше из них закрывается, и отправители и получатели обновляются для ссылки на соответствующие оставшиеся объекты RTCDtlsTransport.
Каналы данных
Каналы RTCDataChannel используют протокол SCTP для связи. Все каналы данных подключения одного участника используют один RTCSctpTransport, находящийся в свойстве sctp подключения.
В свою очередь, транспорт RTCDtlsTransport, используемый для безопасной инкапсуляции SCTP-связи каналов данных, можно найти в свойстве transport объекта RTCSctpTransport.
Примеры
В этом примере представлена функция tallySenders(), которая перебирает отправители RTCRtpSender объекта RTCPeerConnection, подсчитывая, сколько из них находятся в различных состояниях. Функция возвращает объект, содержащий свойства, значения которых указывают, сколько отправителей находится в каждом состоянии.
let pc = new RTCPeerConnection({ bundlePolicy: "max-bundle" });
// …
function tallySenders(pc) {
let results = {
transportMissing: 0,
connectionPending: 0,
connected: 0,
closed: 0,
failed: 0,
unknown: 0,
};
let senderList = pc.getSenders();
senderList.forEach((sender) => {
let transport = sender.transport;
if (!transport) {
results.transportMissing++;
} else {
switch (transport.state) {
case "new":
case "connecting":
results.connectionPending++;
break;
case "connected":
results.connected++;
break;
case "closed":
results.closed++;
break;
case "failed":
results.failed++;
break;
default:
results.unknown++;
break;
}
}
});
return results;
}
Обратите внимание, что в данном коде состояния new и connecting обрабатываются как единый статус connectionPending в возвращаемом объекте.
Спецификации
Совместимость браузеров
| Стационарный компьютер | Мобильный телефон | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на IOS | Samsung Internet | WebView для Android | |
RTCDtlsTransport |
72 | 12 | 82 | 60 | 15.4 | 72 | 82 | 50 | 15.4 | 11.0 | 72 |
error_event |
72 | 12 | Нет | 60 | 15.4 | 72 | Нет | 50 | 15.4 | 11.0 | 72 |
getRemoteCertificates |
72 | 12 | Нет | 60 | 15.4 | 72 | Нет | 50 | 15.4 | 11.0 | 72 |
iceTransport |
72 | 7915–79 | 125 | 60 | 15.4 | 72 | 125 | 50 | 15.4 | 11.0 | 72 |
state |
72 | 12 | 82 | 60 | 15.4 | 72 | 82 | 50 | 15.4 | 11.0 | 72 |
statechange_event |
72 | 7912–79 | 82 | 60 | 15.4 | 72 | 82 | 50 | 15.4 | 11.0 | 72 |
См. также
© 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/RTCDtlsTransport