WebRTC-Android硬编码流程详解

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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值