RTCDtlsTransport
Baseline 廣泛可用 *
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-
當 DTLS 傳輸的
state發生變化時傳送。
描述
DTLS 傳輸的分配
當應用呼叫 setLocalDescription() 或 setRemoteDescription() 時,會建立 RTCDtlsTransport 物件。建立的 DTLS 傳輸數量以及它們的使用方式取決於建立 RTCPeerConnection 時使用的捆綁模式。
是否使用捆綁取決於另一端點能夠協商的內容。所有瀏覽器都支援捆綁,因此當兩端點都是瀏覽器時,您可以放心捆綁將被使用。
然而,一些非瀏覽器遺留端點可能不支援捆綁。為了能夠與此類端點協商(或完全排除它們),在建立連線時可以提供 bundlePolicy 屬性。bundlePolicy 允許您控制如何與這些遺留端點進行協商。預設策略是 "balanced",它在效能和相容性之間取得了平衡。
例如,使用最高級別的捆綁來建立連線
const rtcConfig = {
bundlePolicy: "max-bundle",
};
const pc = new RTCPeerConnection(rtcConfig);
Bundling 允許您使用一個 RTCDtlsTransport 來承載多個高級別傳輸的資料,例如多個 RTCRtpTransceiver。
不使用 BUNDLE 時
當連線在不使用 BUNDLE 的情況下建立時,每個 RTCRtpTransceiver 的每個 RTP 或 RTCP 元件都有自己的 RTCDtlsTransport;也就是說,每個 RTCRtpSender 和 RTCRtpReceiver 都有自己的傳輸,並且所有 RTCDataChannel 物件共享一個專用於 SCTP 的傳輸。
使用 BUNDLE 時
當連線使用 BUNDLE 時,每個 RTCDtlsTransport 物件代表一組 RTCRtpTransceiver 物件。如果連線是使用 max-compat 模式建立的,則每個傳輸負責處理給定型別媒體(音訊、影片或資料通道)的所有通訊。因此,具有任意數量音訊和影片通道的連線將始終有一個 DTLS 傳輸用於音訊通訊,一個用於影片通訊。
由於傳輸在協商過程的早期建立,因此很可能在傳輸建立後才能知道遠端對等方是否支援捆綁。出於這個原因,您有時會看到一開始建立了單獨的傳輸,每個軌道一個,然後在得知捆綁成為可能後,它們會被捆綁起來。如果您的程式碼直接訪問 RTCRtpSender 和/或 RTCRtpReceiver,您可能會遇到它們最初是獨立的,然後一半或更多被關閉,並且傳送者和接收者被更新以引用相應的剩餘 RTCDtlsTransport 物件的情況。
資料通道
RTCDataChannel 使用 SCTP 進行通訊。所有對等連線的資料通道共享一個 RTCSctpTransport,可以在連線的 sctp 屬性中找到。
反過來,您可以透過檢視 RTCSctpTransport 物件的 transport 屬性來識別用於安全封裝資料通道 SCTP 通訊的 RTCDtlsTransport。
示例
此示例展示了一個名為 tallySenders() 的函式,該函式遍歷 RTCPeerConnection 的 RTCRtpSender,計算它們處於各種狀態的數量。該函式返回一個物件,其中包含指示每個狀態有多少傳送者的屬性。
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 狀態。
規範
| 規範 |
|---|
| WebRTC:瀏覽器中的即時通訊 # dom-rtcdtlstransport |
瀏覽器相容性
載入中…