文档章节

Kurento 之 WebRTC 统计

chapin
 chapin
发布于 2017/02/17 11:48
字数 1027
阅读 185
收藏 1

介绍

WebRTC流(音频,视频或数据)可能丢失,并且经历不同数量的网络延迟。 为了评估WebRTC应用程序的性能,可能需要能够监视底层网络和媒体管道的WebRTC功能。

为此,Kurento为服务器端(Kurento Media Server,KMS)提供了WebRTC统计数据收集。 此功能的实现遵循W3C WebRTC的统计API中提供的指南。 因此,KMS中收集的统计数据可以分为两组:

  • inboundrtp:KMS接收流的统计信息。
  • outboundrtp:KMS发送流的统计信息。

API 描述

通常,WebRTC统计信息收集功能由KMS提供,并通过不同的Kurento客户端实现(Java,JavaScript客户端提供开箱即用)来使用。 要读取这些统计信息,首先应该使用Media Pipeline对象的setLatencyStats方法启用它们。 使用Kurento Java客户端,操作如下:

String kmsWsUri = "ws://localhost:8888/kurento";
KurentoClient kurentoClient = KurentoClient.create(kmsWsUri);
MediaPipeline mediaPipeline = kurentoClient.createMediaPipeline();
mediaPipeline.setLatencyStats(true);

// ...

使用 JavaScript 客户端:

var kmsWsUri = "ws://localhost:8888/kurento";
kurentoClient(kmsWsUri, function(error, kurentoClient) {
   kurentoClient.create("MediaPipeline", function(error, mediaPipeline) {
      mediaPipeline.setLatencyStats(true, function(error){

         // ...

      });
   });
});

一旦启用WebRTC统计,第二步是使用媒体元素的getStats方法读取统计值,例如,读取Java中的WebRtcEndpoint对象的统计信息:

WebRtcEndpoint webRtcEndpoint = new WebRtcEndpoint.Builder(mediaPipeline).build();
MediaType mediaType = ... // it can be MediaType.VIDEO, MediaType.AUDIO, or MediaType.DATA
Map<String, Stats> statsMap = webRtcEndpoint.getStats(mediaType);

// ...

JavaScript操作:

mediaPipeline.create("WebRtcEndpoint", function(error, webRtcEndpoint) {
   var mediaType = ... // it can be 'VIDEO', 'AUDIO', or 'DATA'
   webRtcEndpoint.getStats(mediaType, function(error, statsMap) {

      // ...

   });
});

请注意,WebRTC统计信息将作为map读取。 因此,此集合的每个条目都有一个键和一个值,其中键是特定统计量,在读取时具有给定值。 考虑到这些值参考实时属性,因此这些值随时间变化,这取决于多个因素(例如网络性能,KMS负载等)。 统计的完整描述在KMD接口描述中定义。 最相关的统计数据如下:

  • ssrc: 同步源(SSRC)。
  • firCount: 统计发送方接收的完整内部请求(FIR)数据包的总数。 此指标仅对视频有效,并由接收方发送。
  • pliCount: 统计由发送方接收并由接收方发送的包丢失指示(PLI)包的总数。
  • nackCount: 统计由发送方接收并由接收方发送的否定确认(NACK)分组的总数。
  • sliCount: 统计发送方接收的分片丢失指示(SLI)分组的总数。 此指标仅对视频有效,并由接收方发送。
  • remb: 接收器估计最大比特率(REMB)。 此指标仅适用于视频。
  • packetsLost: 统计SSRC丢失的RTP数据包总数。
  • packetsReceived: 统计SSRC接收的RTP数据包总数。
  • bytesReceived: 统计SSRC接收的字节总数。
  • jitter: SSRC的以秒为单位的包抖动。
  • packetsSent: 统计SSRC发送的RTP数据包总数。
  • bytesSent: 统计SSRC发送的字节总数。
  • targetBitrate: 当前配置SSRC的比特率目标,以比特每秒为单位。
  • roundTripTime: 基于RTCP时间戳的SSRC估计往返时间(秒)。
  • audioE2ELatency: 以纳秒为单位测量的端到端音频延迟。
  • videoE2ELatency: 以纳秒为单位测量的端到端视频延迟。

总而言之,在KMS中收集WebRTC统计的过程可以总结为两个步骤:1)启用WebRTC统计; 2)读取WebRTC。 此过程如下图所示。 此图还描述了Kurento客户端和KMS之间根据Kurento协议交换的JSON-RPC消息:

Sequence diagram for gathering WebRTC statistics in KMS

Example

有一个正在运行的教程,使用WebRTC收集如前所述信息。 这个演示已经使用JavaScript客户端实现,它可以在GitHub上获得:kurento-loopback-stats

从媒体管道的角度来看,这个演示应用程序包含一个WebRtcEndpoint在环回。 一旦演示启动并运行,WebRTC启用并按1秒钟的速率收集。

除了KMS WebRTC统计,客户端(即浏览器WebRtc对等)也由应用程序收集。 这是使用由peerConnection对象提供的标准方法完成的,即使用其方法getStats。 请查阅位于index.js文件中的JavaScript逻辑以了解实现细节。

两种WebRTC统计值(即浏览器和KMS端)在应用程序GUI中每秒更新和显示,如下所示:

tatistics results in the kurento-loopback-stats demo GUI

© 著作权归作者所有

共有 人打赏支持
chapin
粉丝 18
博文 83
码字总数 102961
作品 0
成都
程序员
如何使用 WebRTC 与 Kurento 建立视频会议 App

本文作者 WebRTC Ventures 工程师。在今年 RTC 2018 实时互联网大会上,WebRTC Ventures 的资深软件工程师,将围绕 WebRTC 开发带来经验分享。本周是大会最后一周门票限免,点击这里抓住最后...

Agora
08/22
0
0
WebRTC入门学习之初识WebRTC

引言: 先声明本人只是小小实习生一枚,若有不正确的,希望大家帮忙指正。 一、WebRTC基本架构 图一 WebRTC总体架构,摘自百度百科 先说说WebRTC大致的实现思路:我们创建的web app,然后在a...

小小实习生
2015/08/08
0
0
黄开宁:搞多媒体开发要掌握好信号处理、统计和数理分析

尽管有WebRTC和FFmpeg这样的超级工具,但多媒体开发的核心难点的难度并没有因此降低,这需要开发者掌握牢固的基础知识。LiveVideoStack专访了即构科技音视频技术资深架构师黄开宁,他对学习多...

livevideostack
05/15
0
0
WebRTC的拥塞控制和带宽策略

网络的波动带来的卡顿直接影响着用户的体验,在WebRTC中设计了一套基于延迟和丢包反馈的拥塞机制(GCC)和带宽调节策略来保证延迟、质量和网路速度之间平衡,本文中重点是介绍基于trendline...

caoshangpa
05/29
0
0
[翻译] 通过WebRTC技术实现点对点通信

通过WebRTC技术实现点对点通信 WebRTC是一个实验性技术。 因为该技术的规格还没有稳定下来,在各浏览器中必须通过检查属性表的前缀来正确使用,例如:在Chrome中使用 webkitRTCPeerConnectio...

yunfound
2014/03/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java日期和时间获取问题

获取年月日时分秒 Calendar cal = Calendar.getInstance();//获取年int year = cal.get(Calendar.YEAR);//获取月,范围是0-11,最后使用需+1int month = cal.get(Cal...

lanyu96
27分钟前
7
0
Ceph学习笔记2-在Kolla-Ansible中使用Ceph后端存储

环境说明 使用Kolla-Ansible请参考《使用Kolla-Ansible在CentOS 7单节点上部署OpenStack Pike》; 部署Ceph服务请参考《Ceph学习笔记1-Mimic版本多节点部署》。 配置Ceph 以osdev用户登录: ...

LastRitter
31分钟前
6
0
OSChina 周二乱弹 —— 老司机表示右手无处安放

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @花间小酌 :分享李宗盛的单曲《鬼迷心窍》--春风再美也比不上你的笑 《鬼迷心窍》 - 李宗盛 手机党少年们想听歌,请使劲儿戳(这里) 每天早...

小小编辑
42分钟前
225
5
复习2

10月22日任务 awk 中使用外部shell变量 awk 合并一个文件 把一个文件多行连接成一行 awk中gsub函数的使用 awk 截取指定多个域为一行 过滤两个或多个关键词 用awk生成以下结构文件 awk用print...

hhpuppy
50分钟前
5
0
原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部