RTCPeerConnection:track 事件

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

当新的 track 已添加到连接的 RTCRtpReceiver 时,会向 RTCPeerConnection 上的 ontrack 事件处理程序发送 track 事件。 在此事件送达时,新的 track 已完全添加到 peer connection。 更多详情请参阅 Track 事件类型

在发送此事件时,新的 track 已完全添加到 peer connection。 更多详情请参阅 Track 事件类型

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

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

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

ontrack = (event) => { }

事件类型

一个 RTCTrackEvent。 继承自 Event

Event RTCTrackEvent

事件属性

由于 RTCTrackEvent 基于 Event,因此其属性也可用。

receiver 只读

添加到 RTCPeerConnection 的 track 所使用的 RTCRtpReceiver

streams 只读 可选

一个 MediaStream 对象数组,每个对象代表已添加的 track 所属的媒体流之一。 默认情况下,数组为空,表示一个无流的 track。

track 只读

已添加到连接的 MediaStreamTrack

transceiver 只读

新 track 正在使用的 RTCRtpTransceiver

示例

此示例代码展示了如何创建一个新的 RTCPeerConnection,然后添加一个 track 事件处理程序。

js
pc = new RTCPeerConnection({
  iceServers: [
    {
      urls: "turn:fake.turn-server.url",
      username: "some username",
      credential: "some-password",
    },
  ],
});

pc.addEventListener("track", (e) => {
  videoElement.srcObject = e.streams[0];
  hangupButton.disabled = false;
});

事件处理程序将新 track 的第一个流分配给一个现有的 <video> 元素,该元素使用变量 videoElement 标识。

您也可以将事件处理函数分配给 ontrack 属性,而不是使用 addEventListener()

js
pc.ontrack = (e) => {
  videoElement.srcObject = e.streams[0];
  hangupButton.disabled = false;
  return false;
};

规范

规范
WebRTC:浏览器中的实时通信
# event-track

浏览器兼容性