BRTC 提供两套关于通话质量反馈的回调:
class BRTCCore : public BRTCCallback { public: // interface BRTCCallback void onStatistics(const BRTCStatistics& statistics) override; void onNetworkQuality(uint32_t count, BRTCNetworkQualityInfo* qualityArray) override; private: BRTC* m_pBrtc = nullptr; } void BRTCCore::onStatistics(const BRTCStatistics& statistics) { std::string info; info.append("\nupLoss: ") .append(rtc::ToString(statistics.upLoss)) .append("\ndownLoss: ") .append(rtc::ToString(statistics.downLoss)) .append("\ncpu: ") .append(rtc::ToString(statistics.cpu)) .append("\nrtt: ") .append(rtc::ToString(statistics.rtt)); if (statistics.localStatisticsArray != nullptr && statistics.localStatisticsArraySize != 0) { for (int i = 0; i < static_cast<int>(statistics.localStatisticsArraySize); i++) { info.append("\nvideoBitrate: ") .append(rtc::ToString(statistics.localStatisticsArray[i].videoBitrate)) .append("\naudioBitrate: ") .append(rtc::ToString(statistics.localStatisticsArray[i].audioBitrate)) .append("\nwidth: ") .append(rtc::ToString(statistics.localStatisticsArray[i].width)) .append("\nheight: ") .append(rtc::ToString(statistics.localStatisticsArray[i].height)) .append("\nfps: ") .append(rtc::ToString(statistics.localStatisticsArray[i].frameRate)) .append("\navailableSendBandwidth: ") .append(rtc::ToString(statistics.localStatisticsArray[i].availableSendBandwidth)) .append("\nstreamType: ") .append(rtc::ToString(statistics.localStatisticsArray[i].streamType)); } } if (statistics.remoteStatisticsArray != nullptr && statistics.remoteStatisticsArraySize != 0) { for (int i = 0; i < static_cast<int>(statistics.remoteStatisticsArraySize); i++) { info.append("\nremote userId: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].userId)); info.append("\nremote videoBitrate: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].videoBitrate)) .append("\nremote audioBitrate: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].audioBitrate)) .append("\nremote width: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].width)) .append("\nremote height: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].height)) .append("\nremote fps: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].frameRate)) .append("\nremote availableRecvBandwidth: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].availableRecvBandwidth)); .append("\nremote streamType: ") .append(rtc::ToString(statistics.remoteStatisticsArray[i].streamType)); } } LOG(INFO) << "received statistic:" << info; } void BRTCCore::onNetworkQuality(uint32_t count, BRTCNetworkQualityInfo* qualityArray) { BRTCNetworkQualityInfo* infoArray = new BRTCNetworkQualityInfo[count]; for (uint32_t index = 0; index < count; index++) { // 用户ID: qualityArray[index].userId; // 用户的网络质量评价:static_cast<BRTCNetworkQualityLevel>(qualityArray[index].qualityLevel); } }
通话质量检测
BRTC 提供两套关于通话质量反馈的回调:
示例代码