代码之家  ›  专栏  ›  技术社区  ›  Joseph D.

WebRTC:RTCTrackEvent通过OnTrack处理程序接收时不包括收发器

  •  0
  • Joseph D.  · 技术社区  · 7 年前

    RTCTrackEvent :

    [Constructor(DOMString type, RTCTrackEventInit eventInitDict),
     Exposed=Window]
    interface RTCTrackEvent : Event {
        readonly attribute RTCRtpReceiver           receiver;
        readonly attribute MediaStreamTrack         track;
        [SameObject]
        readonly attribute FrozenArray<MediaStream> streams;
        readonly attribute RTCRtpTransceiver        transceiver;
    };
    

    有一个 transceiver 成员。

    但是,当我收到 track 事件通过 ontrack() 处理程序, 收发器 不存在。

    我要用 收发器 显示接收到的远程曲目。

    你知道最近用什么方式显示遥控轨道吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Philipp Hancke    7 年前

    大多数浏览器还没有实现收发器。只有firefox 59+已经实现了它们。但你不需要他们,因为你得到的轨道和相关的流。

        2
  •  0
  •   Joseph D.    7 年前

    不再需要收发器。

    addTrack() 生成 track 遥控器 ontrack() 将触发处理程序。

    远程的 处理程序只需使用接收到的跟踪流设置远程视频src。

    代码(口香糖)

    navigator.mediaDevices.getUserMedia({
       audio: true,
       video: true
    }).then((stream) => {
       if (! vid.srcObject) {
          vid.srcObject = stream;
       }
       // this triggers track event to the remote peer
       pc.addTrack(stream.getVideoTracks()[0], stream);
    }).catch(logError);
    

    代码(ontrack()-remote)

    pc.ontrack = function(evt) { // "track" event received
       if (! remote_vid.srcObject) {
          remote_vid.srcObject = evt.streams[0];
       }
    };