WebRTC getStat() API 设置

2023-11-25

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

例如我的设置:

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

这将返回一个带有 2 个函数的 RTCStats Response 对象

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 的经验吗?我相信我可能没有正确执行此操作


以下解决方案对我有用。

创建对等连接

pc = new RTCPeerConnection(pc_config, pc_constraints);

添加 onaddstream 处理程序

pc.onaddstream = onRemoteStreamAdded;

处理程序本身

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

        getStats(pc);
    };

注意从处理程序调用的 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);
        });
    }
};

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebRTC getStat() API 设置 的相关文章

  • 是否可以使用 S3 进行 Flash 伪流?

    我一直在使用 S3 来存储和提供 FLV 和 MP4 视频 它效果很好 但内容是渐进下载的 我想知道是否有可能让所谓的 伪流 与 S3 一起使用 伪流允许观看者在下载完整视频之前在视频中向前搜索 并仅将必要的位发送到 Flash 播放器 我
  • 为什么turn服务器不支持tcp连接?

    我是 WebRTC 新手 我需要为我的 webrtc 应用程序配置我自己的 Turn 服务器 我使用以下命令安装了我的转弯服务器 apt get install coturn 我只需要通过 tcp 运行转变服务器 它不必使用 UDP 进行任
  • Raspberry Pi 无延迟(<10ms)视频流

    我正在基于 Raspberry Pi 构建四轴飞行器 我想通过蜂窝连接将网络摄像头的视频流式传输到我的计算机 我尝试了 ffmpeg 和 mjpg 但它必须有很大的延迟才能仅通过观看视频来控制 Quad 我的问题是是否可以以非常小的延迟 如
  • 将多个实时视频流拉入 WPF

    我想创建一个应用程序 将由同轴电缆 hdmi 或其他标准提供的多个实时视频源拉入 WPF 中进行操作 即应用一些转换或像素着色器 然后将其输出到监视器 开始使用这个应用程序时我会考虑什么 有没有任何硬件可以让事情变得更容易 如果您通过同轴电
  • McNemar 在 Python 中的测试以及分类机器学习模型的比较 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有用 Python 实现的好的 McNemar 测试 我在 Scipy stats 或 Scikit
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3
  • FFmpeg - 来自 NodeJS 的 RTMP 流,流比实时更快

    我的目标是在 Node 中渲染画布 并将该画布流式传输到 RTMP 服务器 最终是 Twitch 但现在我正在在本地 RTMP 服务器上测试 流式传输到 RTMP 的标准方式似乎是ffmpeg 所以我使用它 从 NodeJS 中作为子进程生
  • 访问或解析 R 中的 summary() 中的元素

    我运行以下 R 命令来进行 Dunnett 测试并获取摘要 如何访问下面线性假设的每一行 这是摘要输出的一部分 基本上我不知道摘要的结构 我尝试使用名称 但它似乎不起作用 因为我没有看到任何命名属性来提供这一点 library multco
  • 在 Ubuntu 中使用 Gstreamer 通过 RTP 协议流式传输 Mp4 视频

    我正在尝试从本地目录获取视频文件 启用来自服务器的流并从客户端捕获这些帧 我使用了以下管道 服务器端 gst launch v filesrc location home gokul Videos Econ TestVideo radioa
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • R 中的卡方拟合优度检验

    我有一个观察值向量 还有一个用模型计算的值向量 actual lt c 1411 439 214 100 62 38 29 64 expected lt c 1425 3 399 5 201 6 116 9 72 2 46 3 30 4 6
  • 回归模型 statsmodel python

    这更多是一个统计问题 因为代码运行良好 但我正在学习 python 中的回归建模 我在下面使用 statsmodel 编写了一些代码来创建一个简单的线性回归模型 import statsmodels api as sm import num
  • 计算数据集列的百分位数

    最亲爱的 R 专家 为您快速介绍一下 我正在做一项作业 在这个练习中 我被要求从数据中获取基本统计数据infert数据集 它是内置的 特别是其中的一列 infert age 对于不熟悉数据集的人 gt table ages Which is
  • NumPy 或 SciPy 计算加权中位数

    我正在尝试自动化 JMP 执行的流程 分析 gt 分布 输入 A 列作为 Y 值 使用后续列 作为 权重 值 在 JMP 中 您必须一次执行一列 我想使用 Python 循环所有列并创建一个数组 显示每列的中位数 例如 如果质量数组为 0
  • 在 Android 和 iOS 上播放的视频/音频编解码器设置是什么

    哪些编解码器设置将生成可在 Android videoView 和 iOS UIWebView 上播放的有效视频 安卓 http developer android com guide appendix media formats html
  • git 查找胖提交

    是否可以获取有关每次提交中的更改浪费了多少空间的信息 以便我可以找到添加了大文件或大量文件的提交 这一切都是为了尝试减少 git repo 的大小 变基并可能过滤提交 你可以这样做 git ls tree r t l full name H
  • 如何在 Android 上通过 RTMP 进行流式传输?

    我正在尝试在远程服务器上播放视频文件 视频格式为flv 服务器为Flash Media Server3 5 我将通过 RTMP 连接到服务器并使用 Android Media Player 实现视频文件的播放 真的吗 可能吗 任何帮助都是我
  • Node.js 中的 webRTC

    我想在node js 中使用webRTC 来管理涉及浏览器和nodejs 上的对等点的混合连接 我做了一些测试和搜索 我尝试使用wrtc https github com js platform node webrtc or webrtc
  • 如何使用 ggplot2 对曲线下的区域进行着色

    我一直在尝试使用 ggplot2 生成类似于此 R 图形的绘图 xv lt seq 0 4 0 01 yv lt dnorm xv 2 0 5 plot xv yv type l polygon c xv xv lt 1 5 1 5 c y
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网

随机推荐

  • 如何在 Windows 注册表中设置值? (C++)

    我想将键 HKEY LOCAL MACHINE Software company name game name settings value 编辑为 1 DWORD 这是我的代码 HKEY hkey DWORD dwDisposition
  • Windows系统中是否有无缓冲的I/O?

    我想找到低级 C C API 相当于 Linux 系统中的 写入 但没有缓冲区 有吗 fread fwrite 等缓冲 I O 不是我想要的 Look at 创建文件使用 FILE FLAG NO BUFFERING 选项
  • 如何在 Lisp In A Box 中更改 emacs 配置

    我成为一名程序员已有十年了 但我相信这是我第一次在论坛上提出问题 我只是无法弄清楚这一点 也无法在网上找到答案 我正在尝试打开 CUA 模式 以便 emacs 对于 Windows 用户来说更容易忍受 正常的复制粘贴功能 我运行的是 Win
  • PHP while 语句中的 Lambda 和冒号? [复制]

    这个问题在这里已经有答案了 下面的代码是什么意思 它是 while 语句中的 lambda 然后是冒号 来自 JavaScript 我不知道这意味着什么 甚至不知道如何搜索它 谁能帮忙解释一下吗 while query gt have po
  • 使用 python 自动从 Windows 文件对话框打开文件

    我进行自动化测试并获得一个文件对话框 我想使用 python 或 selenium 从 Windows 打开文件对话框中选择一个文件 注意 该对话框是由其他程序给出的 我不想用 Tkinter 创建它 窗口看起来像 这个怎么做 考虑使用py
  • Mac OS X 的 UIDevice 类?

    我正在尝试将我的 iOS 应用程序之一移植到 Mac OS X 但我正在努力寻找UIDevice 类似于 OS X 的对象 我有兴趣获取设备的名称 例如 MacBookAir 编辑 回答正如 Josh Caswell 指出的 你可以使用SC
  • XML 炸弹(实体注入)默认在 .Net 4.0 中得到处理,但在 .Net 3.5 中则不然。如何?发生了什么变化?

    以下代码 XmlDocument xdoc new XmlDocument String xml
  • 将 Rc 作为函数参数传递时出错

    我在经过时遇到一些奇怪的行为Rc
  • 默认今日小部件中的布局约束冲突

    我在刚刚为我的应用程序创建的 今日小部件 中观察到有关自动布局的非常奇怪的行为 试图找到问题的根源 我最终创建了一个简单的新的 Xcode 项目 单视图应用程序 并添加了今天扩展作为新目标 甚至没有碰它 当我在我的设备 iPhone 6s
  • Android Hybid 应用程序使用 Ionic 框架显示远程图像时出现问题?

    我是离子的新手 我正在使用 Ionic Framework 1 3 20 Angular JS Cordova 5 0 0 模板文件browser html代码 div class col 50 img div app js code st
  • 如何停止 Eclipse 关于目标文件夹内容的警告?

    我从我的生成文件中收到大量警告target我无法修复的文件夹 例如从 XSD 或 Surefire 报告生成的 Java 代码 并且它在我的源代码中隐藏了正确的警告 有谁知道如何告诉 Eclipse 不要在某些文件夹中显示警告 或者只是在
  • 如何为 IJulia Jupyter 笔记本设置 Julia 环境?

    我在全局 Julia 中遇到包兼容性问题环境对于我想在 Jupyter 笔记本中使用的特定包 有没有办法告诉 IJulia 使用不同的环境而不是我的全局环境 默认的 IJulia 内核sets project 因此 最方便的方法 IMO 是
  • 我们应该直接使用 ScalaSignature 吗?

    Scala 签名是一个注释 它包含元信息 https github com scala scala blob v2 9 2 src library scala reflect ScalaSignature java 然后提供解析器 但sca
  • 在读取记录时我应该使用 SQL 事务吗?

    SQL事务用于插入 更新 但是否应该用于读取记录呢 如果您在一次查询中查询所有记录 然后一次性将它们拉回 则没有必要 一切都包含在隐式事务中 也就是说 即使您取回一百万条记录 即使其他进程正在更改这些记录 您也会看到所有一百万条记录在同一时
  • 如何在 Qt 中一次将输入掩码和 QValidator 设置为 QLineEdit?

    我想要一个接受 IP 地址的行编辑 如果我将输入掩码指定为 ui gt lineEdit gt setInputMask 000 000 000 000 它接受大于 255 的值 如果我给出验证器 那么我们必须在每三位数字后给出一个点 最好
  • 通过F#和Npgsql调用Postgresql中的存储过程

    我正在尝试使用 Npgsql 类型提供程序从 F 调用 postgresql 中的存储过程 目前 我连接数据库的方式如下 open System open System Data open System Data Entity open S
  • Laravel 中的自定义代码应该放在哪里

    再会 我有一些来自以前的非 MVC 应用程序的自定义代码 这是经过所有单元测试的东西 现在 我需要将其放入 Laravel 应用程序中 它们不是控制器 模型或视图 这是否意味着我必须将它们与 Symfony 和 Swiftmailer 文件
  • 如何在 TypeScript 中指定任何可更新的类型?

    我尝试过这个 但它不起作用 Foo 只是对有效方法的测试 Bar 是真正的尝试 它应该接收任何可更新的类型 但 Object 的子类对于该目的无效 class A class B public Foo newable typeof A vo
  • 重置 SQL Server 中的标识列

    我正在制作一个存储联系人的 SQL 数据库 我希望能够删除联系人 每个联系人的正确 ID 对于我的软件连接到它至关重要 假设我已经联系了詹姆斯 他是第一个联系的 他的id是0 我添加Mary 她的id是1 如果我删除James 如何将Mar
  • WebRTC getStat() API 设置

    我正在尝试使用 WebRTC api 中的 getStat 来查看它是否提供任何有用的信息来测量延迟和其他视频流数据 问题是没有太多关于如何使用它的信息 即使是较旧的现有示例也相当罕见 但从那时起 api 已经发生了变化 例如我的设置 pe