webrtc代码走读一(视频参数配置汇总)

一、视频编码格式初始配置

webrtc\media\engine\internalencoderfactory.cc

webrtc代码走读一(视频参数配置汇总)_第1张图片

1、按照Push顺序,优先选取第一个编解码格式。

2、屏蔽kUlpfecCodecName、kRedCodecName的codec,可以关闭FEC冗余。

3、开启FlexFEC功能。

webrtc代码走读一(视频参数配置汇总)_第2张图片

 

二、视频分辨率初始配置

webrtc\pc\videocapturertracksource.cc

webrtc代码走读一(视频参数配置汇总)_第3张图片

选取的原则是,在kVideoFormats里面找参数与kDefaultFormat默认值最接近的一组参数,作为本端的编码能力。

webrtc代码走读一(视频参数配置汇总)_第4张图片

三、视频码率默认值

webrtc\media\engine\webrtcvideoengine.cc

webrtc代码走读一(视频参数配置汇总)_第5张图片

EncoderStreamFactory::CreateEncoderStreams

webrtc代码走读一(视频参数配置汇总)_第6张图片

四、默认QP、帧率最大值配置

webrtc\media\engine\webrtcvideoengine.cc

static const int kDefaultQpMax = 56;

const int kDefaultVideoMaxFramerate = 60;

webrtc代码走读一(视频参数配置汇总)_第7张图片

五、使能SRTP

webrtc\src\webrtc\api\peerconnectioninterface.h

disable_encryption = true 取消SRTP

disable_encryption = false 开启SRTP

webrtc代码走读一(视频参数配置汇总)_第8张图片

配置密钥:

bool Conductor::CreatePeerConnection(bool dtls)配置是否生成密钥。

六、生效新的帧率码率流程

在webrtc里面函数实现如下:
->VideoStreamEncoder::EncodeVideoFrame
->VideoSender::AddVideoFrame----在这个函数中读取全局变量encoder_params_,判断是否需要调整视频参数。
->VideoSender::SetEncoderParameters

->VCMGenericEncoder::SetEncoderParameters

webrtc代码走读一(视频参数配置汇总)_第9张图片

->H264EncoderImpl::SetRateAllocation---传递新的帧率码率到编码器。

webrtc代码走读一(视频参数配置汇总)_第10张图片

 

七、H264打包模式

codec.cc  VideoCodec::SetDefaultParameters

webrtc代码走读一(视频参数配置汇总)_第11张图片

webrtc代码走读一(视频参数配置汇总)_第12张图片

 

八、冗余模式配置

internalencoderfactory.cc

webrtc冗余打包方式有三种:Red(rfc2198)、Ulpfec(rfc5109)、Flexfec(草案)。其中Red和Ulpfec要成对使用。

webrtc代码走读一(视频参数配置汇总)_第13张图片

九、MTU最大包长 

webrtcvideoengine.cc

kVideoMtu:该值用于配置一个MTU报文的最大包长。

十、BWE降码率最小阀值

webrtcvideoengine.cc

kMinVideoBitrateKbps:BWE检测网络异常,会通过降低码率保证视频流畅性,该值配置降低的最小阀值。

webrtc代码走读一(视频参数配置汇总)_第14张图片

 

十一、NACK配置

webrtc支持RTPFB和PLI FB两种重传方式。
AssignPayloadTypesAndAddAssociatedRtxCodecs->AddDefaultFeedbackParams里面将两种方式都填写到SDP命令行里面。

webrtc代码走读一(视频参数配置汇总)_第15张图片

开启NACK可以使能高亮参数,关闭NACK可以屏蔽高亮参数。

初始化流程:

1、WebRtcVideoSendStream::SetCodec

webrtc代码走读一(视频参数配置汇总)_第16张图片

2、VideoSendStreamImpl::ConfigureProtection

决定是否创建NACK类

webrtc代码走读一(视频参数配置汇总)_第17张图片

webrtc代码走读一(视频参数配置汇总)_第18张图片

3、ProtectionBitrateCalculator::SetProtectionMethod

webrtc代码走读一(视频参数配置汇总)_第19张图片

4、VCMLossProtectionLogic::SetMethod

webrtc代码走读一(视频参数配置汇总)_第20张图片

十二、协商音视频的PT值

一、视频PT值协商

webrtcvideoengine.cc  static std::vector AssignPayloadTypesAndAddAssociatedRtxCodecs

webrtc代码走读一(视频参数配置汇总)_第21张图片

 

二、音频PT值协商

webrtcvoiceengine.cc   WebRtcVoiceMediaChannel::SetSendCodecs

webrtc代码走读一(视频参数配置汇总)_第22张图片

 

 

你可能感兴趣的:(webrtc,webrtc代码走读)