1.硬编解码的一些问题
1.1.方块效应
在我们视频电话时,快速移动摄像头时,会发现画面变出现很多方块。这就是方块效应。
无论是要发送的TCP数据包,还是要编码的图像,都会出现在短时间内出现较大的数据量。TCP面对尖峰,可以选择不为所动,但如果视频编码也对尖峰不为所动,那图像质量就会大打折扣了。因为如果有几帧数据量特别大,但我们仍要把码率控制在原来的水平,那么就会损失比较多的图像信息,图像就会失真。通常的表现是画面出现很多小方块,看上去像是打了马赛克一样,也就是方块效应。
1.2.开关硬编解码
在codec_database.cc文件中
//开关硬解码
#ifdef VIDEO_HARDWARE_DECODE 1
在video_encoder.cc文件中
//开关硬编码
#define VIDEO_HARDWARE_ENCODE 1
如果硬解码配置失败会切换到软解
VideoEncoder* VideoEncoder::Create(VideoEncoder::EncoderType codec_type) {
#if defined(WEBRTC_ANDROID) && defined(VIDEO_HARDWARE_ENCODE)
VideoEncoder* encoder = NULL;
LOG(LS_INFO) << "WebRTC(Android) Use Hardware Encode.";
static webrtc_jni::MediaCodecVideoEncoderFactory* factory = NULL;
if(!factory) {
factory = new webrtc_jni::MediaCodecVideoEncoderFactory;
}
switch (codec_type) {
case kH264:
LOG(LS_INFO) << "Create H264 Hardware Encode.";
encoder = factory->CreateVideoEncoder(kVideoCodecH264);
break;
case kUnsupportedCodec:
RTC_NOTREACHED();
retur