RTCTrackEvent

Baseline 已广泛支持

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

RTCTrackEvent 接口是 WebRTC API 的一部分,代表 track 事件。当一个新的 MediaStreamTrack 被添加到 RTCPeerConnection 的一个 RTCRtpReceiver 时,会发送此事件。

事件的目标是正在添加轨道的 RTCPeerConnection 对象。

此事件由 WebRTC 层发送给网站或应用程序,因此通常您不需要自己实例化 RTCTrackEvent

Event RTCTrackEvent

构造函数

RTCTrackEvent()

创建并返回一个新的 RTCTrackEvent 对象。您可能不需要自己创建新的 track 事件,因为它们通常由 WebRTC 基础设施创建并发送到连接的 ontrack 事件处理程序。

实例属性

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

receiver 只读

添加到 RTCPeerConnection 的轨道的 RTCRtpReceiver

streams 只读 可选

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

track 只读

已添加到连接的 MediaStreamTrack

transceiver 只读

新轨道正在使用的 RTCRtpTransceiver

Track event types

只有一种类型的 track 事件。

track

当新的轨道已添加到连接时,RTCPeerConnection 会收到 track 事件。当 track 事件传递到 RTCPeerConnectionontrack 处理程序时,新媒体已经完成了对特定 RTCRtpReceiver 的协商(由事件的 receiver 属性指定)。

此外,接收器的 track 指定的 MediaStreamTrack 与事件的 track 指定的相同,并且该轨道已添加到任何关联的远程 MediaStream 对象中。

您可以添加一个 track 事件监听器来在新的轨道可用时获得通知,以便您可以将媒体附加到 <video> 元素,可以使用 RTCPeerConnection.addEventListener()ontrack 事件处理程序属性。

注意: 收到 track 事件时,表示您的连接已添加新的入站轨道;当您调用 addTrack() 将轨道添加到连接的远端时,这会在远程对等方上触发一个 track 事件,这一点可能很有帮助。

示例

这个简单的例子创建了一个 track 事件的事件监听器,它将 ID 为 video-box<video> 元素的 srcObject 设置为事件的 streams 数组中传递的第一个流。

js
peerConnection.addEventListener("track", (e) => {
  let videoElement = document.getElementById("video-box");
  videoElement.srcObject = e.streams[0];
});

规范

规范
WebRTC:浏览器中的实时通信
# dom-rtctrackevent

浏览器兼容性