webrtc状态获取

简单调用

回调类

 class NRPlayerStatsObserver : virtual public webrtc::RTCStatsCollectorCallback{public:NRPlayerStatsObserver();virtual ~NRPlayerStatsObserver();virtual void OnStatsDelivered(const rtc::scoped_refptr<const RTCStatsReport>& report);};

需要的类变量

rtc::scoped_refptr<NRPlayerStatsObserver> rtc_stats_observer_;

初始化

rtc_stats_observer_ = new rtc::RefCountedObject<NRPlayerStatsObserver>();

调用

 int NRWebrtcPlayer::GetStatus(){if (peer_connection_ != nullptr){peer_connection_->GetStats(rtc_stats_observer_);}return 0;}
  • 这事一个异步接口
 void  NRPlayerStatsObserver::OnStatsDelivered(const rtc::scoped_refptr<const RTCStatsReport>& report){std::string json = report->ToJson();cout << json << endl;string videoKey = "RTCInboundRTPVideoStream_" + std::to_string(video_ssrc_);string audioKey = "RTCInboundRTPAudioStream_" + std::to_string(audio_ssrc_);const RTCInboundRTPStreamStats* videoStats = (const RTCInboundRTPStreamStats*)(report->Get(videoKey));const RTCInboundRTPStreamStats* audioStats = (const RTCInboundRTPStreamStats*)(report->Get(audioKey));if (videoStats != NULL){int lost = *videoStats->nack_count - last_lost_video_;int lost = *videoStats->packets_lost -last_lost_video_;recv = (recv == 0) ? 1 : recv;int lost_rate = lost * 100 / recv;if (lost_rate > 100){lost_rate = 100;}last_recv_video_ = *videoStats->packets_received;last_lost_video_ = *videoStats->packets_lost ;}

这里面会有不同类型的状态信息
根据需要取出信息,上边是以RTCInboundRTPVideoStream 为例子,
report 中的key是 RTCInboundRTPVideoStream_2473626177
当然也可以解析json获取,但感觉效率低些

...
{"type":"inbound-rtp","id":"RTCInboundRTPVideoStream_2473626177","timestamp":1644990473721000,"ssrc":2473626177,"kind":"video","trackId":"RTCMediaStreamTrack_receiver_4","transportId":"RTCTransport_0_1","codecId":"RTCCodec_1_Inbound_100","mediaType":"video","jitter":0.006,"packetsLost":0,"packetsReceived":873,"bytesReceived":925690,"headerBytesReceived":20952,"lastPacketReceivedTimestamp":1644990473711,"jitterBufferDelay":7.316,"jitterBufferEmittedCount":101,"framesReceived":105,"frameWidth":1280,"frameHeight":720,"framesPerSecond":30,"framesDecoded":102,"keyFramesDecoded":1,"framesDropped":0,"totalDecodeTime":0.236,"totalInterFrameDelay":3.324999999999999,"totalSquaredInterFrameDelay":0.1143710000000001,"decoderImplementation":"FFmpeg","firCount":0,"pliCount":2,"nackCount":0,"qpSum":2878},...

状态分析

RTCStats 的类型定义 api/status/rtcstats_objects.h

RTCStats 的赋值在src/pc/rtc_stats_collector.cc

webrtc 状态获取相关推荐

  1. java dvr_java实现海康NVR/DVR设备工作状态获取

    该功能需要到JNA的知识. 通过查阅海康设备网络SDK编程指南(DVR&NVR)可以知道海康SDK的调用方法都要同过如下过程: 虚线框的流程是可选部分,不会影响其他流程和模块的功能使用.具体的 ...

  2. ios 获取是否静音模式_iOS音量和静音按键状态获取

    项目中需要用到判断当前手机音量是否为0或者静音按键是否关闭的状态,本来以为这应该有现成的接口,但没找到,而且获取静音按键的状态还有点麻烦,所以在此记录下. 一. 获取手机系统的音量 获取音量是通过获取 ...

  3. WebRTC实践获取视频流

    技术前言 通过上次课程"WebRTC简介"我们知道了WebRtc技术主要是为了实现网页之间的实时通讯,本次课程我们将用一个简单实例展开讲解WebRTC调取本地摄像头的具体方法及原理 ...

  4. 大疆无人机避障传感器状态获取和监听(M300RTK)

    大疆避障传感器状态获取方式,本处记录主要获取方法,方便以后查阅. //监听避障传感器的状态 mFlightController.getFlightAssistant().setObstacleAvoi ...

  5. iOS 监控体系之电池状态监控【电池的状态处理:电池状态获取及监测、电池电量获取及监测、低电量模式切换监测】应用场景:ASO机刷的场景就需要保证设备的高可用性(UIDeviceBattery)

    文章目录 前言 划重点 一.电池状态获取及监测 二.电池电量获取及监测 三.低电量模式切换监测 Q&A See Also 前言 原文地址: https://kunnan.blog.csdn.n ...

  6. android获取wifi连接状态,获取android设备wifi连接状态

    本文将介绍如何获取android设备wifi连接状态! 添加访问权限(AndroidManifest.xml文件里) Java代码(MainActivity.java文件) package com.e ...

  7. 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

    文章目录 一.获取 WIFI 状态 二.主动获取 WIFI 状态 三.被动获取 WIFI 状态 参考 Google 官方文档 : 优化电池续航时间 一.获取 WIFI 状态 在应用中执行某些操作 , ...

  8. 【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )

    文章目录 一.获取充电状态 二.被动获取充电状态 三.主动获取充电状态 参考 Google 官方文档 : 优化电池续航时间 一.获取充电状态 在应用中执行某些操作 , 如软件云端备份 , 从服务器端获 ...

  9. 根据网络状态获取Ip地址

    权限: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses ...

最新文章

  1. 更新租约和检测数据完整性脚本
  2. ##自定义一个自动注入Log 的 插件
  3. vue的多选框存储值操作
  4. Ben Horowitz:执行程序有多糟糕,公司倒闭就有多快
  5. JAVA 学到什么水平就可以转战 Android 了?
  6. C语言中图形方式界面怎么,「分享」C语言如何编写图形界面
  7. Python源码剖析[16] —— Pyc文件解析
  8. 年前最后一波成绩单,请查收!
  9. 自动化打包资源混淆集成python实践----资源混淆
  10. 抽一个读者,送她一台MacBook!
  11. Oracle导出导入dmp文件(exp.imp命令行)
  12. 12.二叉树的序遍历
  13. 微软官方SqlHelper
  14. mybatis映射多对多查询实现
  15. Idea 集成Lombok插件
  16. mysql 5.6忘记root密码_Linux平台MySQL忘记root密码解决方案
  17. 傅里叶变换公式推导(二)
  18. Android使用FFmpeg 解码H264并播放(二)
  19. 别扔掉你的登机牌,黑客可以用它获取个人信息
  20. 操作系统与网络实现 之二十三(丙)

热门文章

  1. 另一个 OracleParameterCollection 中已包含 OracleParameter
  2. gitee.com打不开怎么办
  3. 数据结构与算法分析1.2 Python采用栈的回溯解决四色问题
  4. 【网络】RDMA技术简述
  5. Jenkins Role-based用户鉴权插件
  6. 授人以渔command not found: ***
  7. (毕业设计资料)基于单片机热敏电阻PT100温度控制系统设计
  8. AP美国历史复习计划
  9. 消费返利系统开发,三种返利模式详解
  10. 【机器学习】<刘建平Pinard老师博客学习记录>梯度下降(Gradient Descent)