首页 > 解决方案 > 远程用户离开事件在 webrtc 视频中不起作用

问题描述

我想在用户离开房间或关闭浏览器时收到通知,然后我应该收到通知,因为我尝试了这 2 个功能,但它不起作用

    pc.removestream= (event) => {
                    console.log("user removed");
                  }
stream.onremovetrack = ({track}) => {
                        console.log(`${track.kind} track was removed.`);
                        if (!stream.getTracks().length) {
                          console.log(`stream ${stream.id} emptied (effectively removed).`);
                        }
                    };

在这里,我已经为 webrtc 放置了我的整个代码,任何人都可以检查我的代码并帮助我解决这个问题吗?

pc.ontrack = ({track, streams: [stream]}) => {  


                    stream.onremovetrack = ({track}) => {
                        console.log(`${track.kind} track was removed.`);
                        if (!stream.getTracks().length) {
                          console.log(`stream ${stream.id} emptied (effectively removed).`);
                        }
                    };
                    remoteVideo1.srcObject = stream;  
              };

              pc.removestream= (event) => {
                console.log("user removed");
              }

标签: webrtc

解决方案


用户关闭浏览器相当于pc.close(),而不是删除任何流或轨道。

检测这一点的最佳方法是创建一个数据通道并检查其关闭状态(小提琴):

const dc = pc.createDataChannel("", {negotiated: true, id: 0});
...
dc.onclose = () => console.log("user left");

在这种情况下,远程浏览器通过线路发送SCTP ABORT块,使其与网络丢弃区分开来。


推荐阅读