RTCDataChannel: bufferedamountlow 事件

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流瀏覽器均已支援。

RTCDataChannel 的出站資料傳輸緩衝區中當前位元組數(bufferedAmount)從高於或等於 bufferedAmountLowThreshold 中指定的閾值下降到低於或等於該閾值時,會向 RTCDataChannel 傳送一個 bufferedamountlow 事件。

此事件不可取消,也不會冒泡。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("bufferedamountlow", (event) => { })

onbufferedamountlow = (event) => { }

事件型別

一個通用的 Event

示例

此示例設定了 bufferedamountlow 的處理程式,以便在資料通道的緩衝區下降到低於我們設定的 65536 位元組(即 64kB)的 bufferedAmountLowThreshold 指定的位元組數時,請求更多資料。換句話說,我們將嘗試在緩衝區中至少保留 64kB 的資料,並一次從源讀取 64kB。

js
let pc = new RTCPeerConnection();
let dc = pc.createDataChannel("SendFile");
// Replace with your own source object, such as a file handle
let source = null;
dc.bufferedAmountLowThreshold = 65536;

pc.addEventListener("bufferedamountlow", (ev) => {
  if (source.position <= source.length) {
    dc.send(source.readFile(65536));
  }
});

建立 RTCPeerConnection 後,呼叫 RTCPeerConnection.createDataChannel() 來建立資料通道。然後,為 bufferedamountlow 建立一個監聽器,以便在傳入資料緩衝區的位元組數低於 65536 位元組時,隨時重新填充緩衝區。

您也可以使用事件處理屬性 onbufferedamountlow 來設定 bufferedamountlow 的監聽器。

js
pc.onbufferedamountlow = (ev) => {
  if (source.position <= source.length) {
    dc.send(source.readFile(65536));
  }
};

規範

規範
WebRTC:瀏覽器中的即時通訊
# event-datachannel-bufferedamountlow
WebRTC:瀏覽器中的即時通訊
# dom-rtcdatachannel-onbufferedamountlow

瀏覽器相容性

另見