chrome://webrtc-internals/变量有没有对应的javascript API接口?

12
我想访问chrome://webrtc-internals/中的一些记录变量,但我在谷歌上找不到任何东西,甚至没有看到我能看到的图表的描述。
我特别关心的是packetsLostgoogCurrentDelayMsgoogNacksSent为什么要访问webrtc-internals
我正在编写一个Google Chrome应用程序,用于共享视频流(点对点)。它使用peerjs与其他节点共享流,而peerjs在底层使用了Google的webrtc实现。为了使我的应用程序更完美,我需要知道何时发生大延迟。由于我可以在chrome://webrtc-internals/中看到延迟日志,所以我想知道是否可以通过javascript访问它。
我猜测chrome://webrtc-internals/菜单没有API。

@xan,你觉得答案不完整吗? - user2210287
2
恰恰相反 - 这只是一个24小时的冷却时间,直到我可以授予赏金。 - Xan
2个回答

22

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

var peerjs = new Peer(...);  // initialize peerJS
var connections = peerjs.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 :-)
})

哇,一直在寻找这个信息!getStat()的相关资料非常难找。你知道'googCurrentDelayMS'具体测量的是什么吗? - JerryFox
就我所知,从名称中可以推断出你所观察的流的延迟时间(以毫秒为单位)。据我所知,这是该流的总延迟时间,但实际上我现在正在使用一些其他变量来判断流是否被阻塞 - 例如丢失的数据包。 - user2210287

2
经过大量的研究,这是我使用 twilio SDK 获取电脑的方法。
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);
                    }
                }
            });

//计算错误率 丢失数据包数 / 发送数据包数

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);
                    }
                }

            });

这个是否适用于通过Twillio服务器进行的通话,还是适用于我浏览器上正在进行的任何WebRTC流量? - jignesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接