1、整体描述
目前webrtc内置的视频编解码器包括:VP8、VP9、AV1和H264。一般情况下载pc端基本可以满足大部分的需求,但是有时候为了进行编解码器的扩展包括支持H265或者是支持硬件编解码以提升效率时需要新增编解码模块。
2、新增外部编码器
编码器实现的要点包括两个部分: 一是需要实现以VideoEncoder为基类的编码器对象,核心API实现如下: (1)初始化编码器,将编码参数传入进行初始化。
virtual int InitEncode(const VideoCodec* codec_settings, const VideoEncoder::Settings& settings);
(2)回调函数的注册,用于编码后数据的回传。
virtual int32_t RegisterEncodeCompleteCallback( EncodedImageCallback* callback) = 0;
(3)编码函数,将视频帧数据传入到解码器中,这个函数是实际编码接口;外部数据输入包括VideoFrame数据帧一般是kI420数据和帧类型(I帧、P帧…)
virtual int32_t Encode(const VideoFrame& frame, const std::vector<VideoFrameType>* frame_types) = 0;
(4) QOS相关控制,设置码率和帧率等操作。
void SetRates(const RateControlParameters& parameters) override;
二是需要实现EncodedImageCallback回调基类来处理,编码后的数据回传到视频引擎。核心函数就是将编码后的数据转成EncodedImage结构回传到视频引擎。
2.1 编码器初始化
编码器的初始化主要是对编码器的基础参数包括