是否有一个API为chrome://web内部/变量在javascript

Is there an API for the chrome://webrtc-internals/ variables in javascript?

本文关键字:web 内部 javascript 变量 有一个 API chrome 是否      更新时间:2023-09-26

我想访问chrome://webrtc-internals/中的一些日志变量,但是我在google上没有找到任何东西-甚至没有我可以看到的图形的描述。
我对packetsLostgoogCurrentDelayMsgoogNacksSent特别感兴趣。

为什么我要访问webtc -internals
我正在写一个谷歌chrome应用程序,共享视频流(p2p)。它使用peerjs与其他对等体共享流,这反过来又在底层使用google的webrtc实现。为了使我的应用程序完美,我需要知道什么时候会出现大延迟。由于我可以看到chrome://webrtc-internals/中记录的延迟,我想知道我是否可以通过javascript访问它。

我的猜测是没有API的chrome://webrtc-internals/菜单。

我找到了它-不得不通过几个谷歌社区线程(线程1,线程2):

var peerjs = new Peer(...);  // initialize peerJS
var connections = peerjs.connections;

Connections是一个对象:

Object {2e1c5694-e6ef-e1b2-22d5-84a3807961d4: Array[3]}
    2e1c5694-e6ef-e1b2-22d5-84a3807961d4: Array[3]
        0: DataConnection
        1: MediaConnection
        2: MediaConnection
        length: 3
    __proto__: Array[0]
__proto__: Object

看一下这些连接对象:

var rtcPeerConn = connectionObject.pc; // RTCPeerConnection
rtcPeerConn.getStats(function callback(connStats){
    var rtcStatsReports = connStats.result() // array of available status-reports
    // each status-report object has many status variables, such as
    // googCurrentDelayMs. You need to iterate over all object and check 
    // their names to find the one status report you want
    rtcStatsReports[7].names() // returns all available variables for that report
    var googCurrentDelayMs = rtcStatsReports[7].stat('googCurrentDelayMs')
    console.log(googCurrentDelayMs) // finally - googCurrentDelayMs :-)
})

经过大量研究,这就是我如何使用twilio SDK获得pc的方法。

var rtcPeerConn =Twilio.Device.activeConnection();
rtcPeerConn.options.mediaStreamFactory.protocol.pc.getStats(function callback(report) {
                var rtcStatsReports = report.result();
                for (var i=0; i<rtcStatsReports.length; i++) {
                    var statNames = rtcStatsReports[i].names();
                    // filter the ICE stats
                    if (statNames.indexOf("transportId") > -1) {
                        var logs = "";
                        for (var j=0; j<statNames.length; j++) {
                            var statName = statNames[j];
                            var statValue = rtcStatsReports[i].stat(statName);
                            logs = logs + statName + ": " + statValue + ", ";
                        }
                        console.log(logs);
                    }
                }
            });

//计算errorRate Packetlost/packetsent

var rtcPeerConn =Twilio.Device.activeConnection();
rtcPeerConn.options.mediaStreamFactory.protocol.pc.getStats(function callback(report) {
                var error, pcksent;
                var rtcStatsReports = report.result();
                for (var i=0; i<rtcStatsReports.length; i++) {
                    var statNames = rtcStatsReports[i].names();
                    // filter the ICE stats
                    if (statNames.indexOf("packetsSent") > -1) {
                        var logs = "";
                        for (var j=0; j<statNames.length; j++) {
                            var statName = statNames[j];
                            var statValue = rtcStatsReports[i].stat(statName);
                            if(statName=="packetsLost")
                              error= statValue;
                            if(statName =="packetsSent")
                              pcksent = statValue;
                            logs = logs +"n:" +statName + ": " + statValue + ", ";
                        }
                        console.log(error/pcksent);
                    }
                }
            });