【问题标题】:WebRTC getStat() API Set UPWebRTC getStat() API 设置
【发布时间】:2014-09-24 00:27:25
【问题描述】:

我正在尝试使用 WebRTC api 中的 getStat() 来查看它是否提供任何有用的信息测量延迟和其他视频流数据。问题是没有太多关于如何使用它的信息。 即使是较旧的现有示例也很少见,但此后 api 发生了变化。

比如我的设置:

peerconnection.getStats(function(stats) { 
                          console.log(stats); } ));

这会返回一个带有 2 个函数的 RTCStatsResponse 对象

RTCStatsResponse {result: function, namedItem: function}

尝试调用该 result() 函数会返回一个 RTCStatsReport 对象数组,其中第一个对象的类型为“googLibjingleSession”,第二个对象的类型为“googTrack”。尝试调用另一个 nameItem 函数时未定义

[RTCStatsReport, RTCStatsReport]

根据可用的少量信息 (https://groups.google.com/forum/#!topic/discuss-webrtc/fpr4yn4-3sg),我将获得比目前获得的更多有用信息的 RTCStatObjects。

有人有使用 webrtc 的 getStats 的经验吗?我相信我可能没有正确地做到这一点

【问题讨论】:

    标签: statistics video-streaming webrtc latency


    【解决方案1】:

    以下解决方案对我有用。

    创建对等连接

    pc = new RTCPeerConnection(pc_config, pc_constraints);
    

    添加 onaddstream 处理程序

    pc.onaddstream = onRemoteStreamAdded;
    

    处理程序本身

    var onRemoteStreamAdded = function(event) {
            attachMediaStream(remoteVideo, event.stream);
            remoteStream = event.stream;
    
            getStats(pc);
        };
    

    注意handler调用的getStats函数,函数在后面

    function getStats(peer) {
        myGetStats(peer, function (results) {
            for (var i = 0; i < results.length; ++i) {
                var res = results[i];
                console.log(res);
            }
    
            setTimeout(function () {
                getStats(peer);
            }, 1000);
        });
    }
    

    myGetStats 函数是一个包装器,使其可以在不同的浏览器中通用;

    function myGetStats(peer, callback) {
        if (!!navigator.mozGetUserMedia) {
            peer.getStats(
                function (res) {
                    var items = [];
                    res.forEach(function (result) {
                        items.push(result);
                    });
                    callback(items);
                },
                callback
            );
        } else {
            peer.getStats(function (res) {
                var items = [];
                res.result().forEach(function (result) {
                    var item = {};
                    result.names().forEach(function (name) {
                        item[name] = result.stat(name);
                    });
                    item.id = result.id;
                    item.type = result.type;
                    item.timestamp = result.timestamp;
                    items.push(item);
                });
                callback(items);
            });
        }
    };
    

    它每秒都会获取统计信息并将原始对象打印到控制台日志中。您可以解析日志,然后更改代码,获取必要的对象字段。

    【讨论】:

    • 请注意,此答案是特定于 Chrome 的。见this question
    • 未来的感谢。这些东西仍然没有很好地在线记录
    • 我是新手。对于参数 pc_config 和 pc_constraints 我们需要传递什么值,请您解释一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多