text 的WebRTC的QoS
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了text 的WebRTC的QoS相关的知识,希望对你有一定的参考价值。
1. 输入编码器的帧率,分辨率控制
PeerConnectionClient.java::createVideoTrack方法里面 加入一行 changeCaptureFormat(videoWidth,videoHeight,videoFps);
2. 编码器目标码率设置
PeerConnectionClient.java::onLocalDescription方法里面,调用setVideoMaxBitrate方法进行设置,该方法主体如下:
RtpParameters parameters = localVideoSender.getParameters();
if (parameters.encodings.size() == 0) {
Log.w(TAG, "RtpParameters are not ready.");
return;
}
for (RtpParameters.Encoding encoding : parameters.encodings) {
// Null value means no limit.
encoding.maxBitrateBps = maxBitrateKbps == null ? null : maxBitrateKbps * BPS_IN_KBPS;
}
if (!localVideoSender.setParameters(parameters)) {
Log.e(TAG, "RtpSender.setParameters failed.");
}
Log.d(TAG, "Configured max video bitrate to: " + maxBitrateKbps);
3.最低分辨率设置位置: video_encoder.h
int min_pixels_per_frame = 320 * 180;
4.帧率分辨率动态调整位置:video_stream_encoder.cc
最低帧率控制: const int kMinFramerateFps = 2;
帧率升降幅度: 2/3
分辨率升降幅度: 3/5
5.首帧丢弃原则,和编码器的启动码率有关
bool VideoStreamEncoder::DropDueToSize(uint32_t pixel_count) const {
if (initial_framedrop_ < kMaxInitialFramedrop &&
encoder_start_bitrate_bps_ > 0) {
if (encoder_start_bitrate_bps_ < 300000 /* qvga */) {
return pixel_count > 320 * 240;
} else if (encoder_start_bitrate_bps_ < 500000 /* vga */) {
return pixel_count > 640 * 480;
}
}
return false;
}
3.linux版本启动码率初始值相关配置
peer_connection_factory.cc::CreateCall_w
const int kMinBandwidthBps = 30000;
const int kStartBandwidthBps = 300000;
const int kMaxBandwidthBps = 2000000;
6.编码器启动码率设置
struct BitrateConstraints {
int min_bitrate_bps = 0;
int start_bitrate_bps = kDefaultStartBitrateBps;
int max_bitrate_bps = -1;
private:
static constexpr int kDefaultStartBitrateBps = 600000; //默认是300kbps
};
7.编码器初始最大码率设置
static int GetMaxDefaultVideoBitrateKbps(int width,
int height,
bool is_screenshare) {
int max_bitrate;
if (width * height <= 320 * 240) {
max_bitrate = 600;
} else if (width * height <= 640 * 480) {
max_bitrate = 1700;
} else if (width * height <= 960 * 540) {
max_bitrate = 2000;
} else {
max_bitrate = 2500;
}
if (is_screenshare)
max_bitrate = std::max(max_bitrate, 1200);
return max_bitrate;
}
webrtc抗丢包方法配置:NACK_ONLY 或者 FEC_ONLY 或者 NACK + FEC 或者 KNONE
配置位置: VCMLossProtectionLogic::SetMethod
3. svc vs simulticast
https://webrtchacks.com/sfu-simulcast/
https://www.meetecho.com/blog/simulcast-janus-ssrc/
以上是关于text 的WebRTC的QoS的主要内容,如果未能解决你的问题,请参考以下文章
WebRTC系列分享 第二期 | WebRTC QoS方法之Pacer实现
WebRTC系列-Qos系列之音频设置丢包重传nack
webrtc QOS笔记三 RTT计算,SRS增加XR
webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题
张轲:腾讯云H5语音通信QoE优化 | 云+沙龙
webrtc-RTP/RTSP/RTCP的概念