在推流/拉流成功后,可以通过百家云 WebSDK 的 getStats 接口得到此次通话/直播的音视频质量。 调用频率限制: 1 次/ 2 秒。
//推流质量 if (this.publishStream) { let accumulativeBitrate = 0 let accumulativePacketsSent = 0 let accumulativeAudioBitrate = 0 this.videoBitrateData = [...Array(300)].map((item) => 0) this.audioBitrateData = [...Array(300)].map(item => 0) this.packetsSentData = [...Array(300)].map(item => 0) this.timer = setInterval(() => { this.publishStream.getStats().then(res => { let stats = res this.videoBitrateData.push((stats.videoBytesSent - accumulativeBitrate) * 8 / 1000) this.videoBitrateData.splice(0, 1) this.audioBitrateData.push((stats.audioBytesSent - accumulativeAudioBitrate) * 8 / 1000) this.audioBitrateData.splice(0, 1) this.packetsSentData.push(stats.videoPacketsSent + stats.audioPacketsSent - accumulativePacketsSent) this.packetsSentData.splice(0, 1) accumulativeBitrate = stats.videoBytesSent accumulativeAudioBitrate = stats.audioBytesSent accumulativePacketsSent = stats.videoPacketsSent + stats.audioPacketsSent }) }, 1000) } //拉流质量 this.debugTimer = setInterval(() => { if (this.localStream) { this.localStream.getStats().then((stats) => { stats.width = stats.width || this.stats.width stats.height = stats.height || this.stats.height this.videoBitrate = ((stats.videoBytesSent - this.stats.videoBytesSent || 0) * 4 / 1000).toFixed(2) this.audioBitrate = ((stats.audioBytesSent - this.stats.audioBytesSent || 0) * 4 / 1000).toFixed(2) this.framerate = Math.round(((stats.framesSent - this.stats.framesSent || 0) / 2)) this.packetLoss.addData(stats.videoPacketsSent - stats.videoNacksCount || 0, stats.videoPacketsLost) }) } }, 2000)
推流时的视频质量的相关参数如下:
推流时的音频质量的相关参数如下:
拉流时的视频质量的相关参数如下:
通话质量检测
在推流/拉流成功后,可以通过百家云 WebSDK 的 getStats 接口得到此次通话/直播的音视频质量。 调用频率限制: 1 次/ 2 秒。
示例代码
推流视频质量
推流时的视频质量的相关参数如下:
推流音频质量
推流时的音频质量的相关参数如下:
拉流视频质量
拉流时的视频质量的相关参数如下:
拉流音频质量
拉流时的视频质量的相关参数如下: