javascript 中的 chrome://webrtc-internals/ 变量是不是有 API?
Posted
技术标签:
【中文标题】javascript 中的 chrome://webrtc-internals/ 变量是不是有 API?【英文标题】:Is there an API for the chrome://webrtc-internals/ variables in javascript?javascript 中的 chrome://webrtc-internals/ 变量是否有 API? 【发布时间】:2014-07-26 20:09:03 【问题描述】:我想访问chrome://webrtc-internals/
中记录的一些变量,但我在谷歌上没有找到任何东西——甚至没有我能看到的图表的描述。
我对packetsLost
、googCurrentDelayMs
和googNacksSent
特别感兴趣。
我为什么要访问 webrtc-internals
我正在编写一个共享视频流 (p2p) 的 google chrome 应用程序。它使用peerjs 与其他对等方共享流,而后者又使用谷歌的 webrtc 实现。为了使我的应用程序完美,我需要知道何时发生大延迟。由于我可以看到登录chrome://webrtc-internals/
的延迟,我想知道我是否可以通过 javascript 访问它。
我猜chrome://webrtc-internals/
-menu 没有 API。
【问题讨论】:
@xan 你认为答案不完整吗? 恰恰相反 - 在我可以奖励赏金之前,这只是一个 24 小时的冷却时间。 【参考方案1】:我找到了 - 不得不爬过几个谷歌社区线程(thread 1,thread2):
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 :-)
)
【讨论】:
哇一直在寻找这个信息!很难在 getStat() 上找到东西。你知道“googCurrentDelayMS”到底在测量什么吗? 据我所知,您正在查看的相应流的延迟(以毫秒为单位)的名称。据我所知,它是流的总延迟 - 但我现在实际上正在使用其他一些对我的应用程序更有价值的变量 - 丢失数据包以确定流何时被阻塞。【参考方案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);
);
//计算errorRate Packetlost / packetent
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 流量?以上是关于javascript 中的 chrome://webrtc-internals/ 变量是不是有 API?的主要内容,如果未能解决你的问题,请参考以下文章