Kurento 之 WebRTC 统计

Stella981
• 阅读 1128

介绍

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消息:

Kurento 之 WebRTC 统计

Example

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

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

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

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

Kurento 之 WebRTC 统计

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
HTML5新特性之WebRTC(音视频数据交互)
1、概述WebRTC是“网络实时通信”(WebRealTimeCommunication)的缩写,它主要用来让浏览器实时获取和交换视频、音频和数据。WebRTC共分三个API。MediaStream(又称getUserMedia)RTCPeerConnectionRTCDataChannelgetU
Stella981 Stella981
3年前
Kurento On WebRTC
WebRTC是一种通过由万维网联盟(W3C)起草的为浏览器和移动应用提供实时通信(RTC)功能的技术简。在本指南中,我们将向您介绍重要的部分,以及它们如何适用于Kurento。KurentoWebRTC旨在成为WebRTC通信的一方。另一个对等体可以是具有WebRTC能力的浏览器使用RTCPeerConnectionAPI,本地WebRTC
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这