• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

iOS 15 H264硬编码码率变小,图像模糊

武飞扬头像
shuii
帮助1

IOS 15发布以后,突然发现线上的APP,视频变模糊了,非常模糊,肉眼可明显看出来。

先上图:

拉流端画面:

学新通

推流端上行网速:

学新通

检查基本情况:

1. 代码没变,近期没上新APP

2. 网络环境良好,不存在网速差的情况

3. 部分机型有这种情况,公司的iPhone 6s没更新系统,能正常工作,iPhone 11 更新到IOS 15系统,存在这种情况.

问题确认:经过多台机器验证,得出结论,IOS 15 以上的系统存在码率兼容问题,现象就是编码之后的视频很模糊。

问题解决:

进过代码排查,发现码率码率设置的接口在新系统上不适用了,可能是以前的代码也没有正确使用。

1. 设置平均码率:

status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_AverageBitRate, (__bridge CFTypeRef)@(_configuration.videoBitRate));

2. 设置码率上限:

        status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_DataRateLimits, (__bridge CFArrayRef)limit);

经过反复设置,多次增加码率,最终增加到码率为30M bps才正常,但这种方法肯定是不可控的,没理由无限增大码率

3. 不断查阅资料和查看API的说明,官网说明其实也很模糊,特别是kVTCompressionPropertyKey_DataRateLimits.

最终在接口说明里面看到一个关键信息,时间戳。

学新通

学新通 

TVCompressionSessionEncodeFrame的参数presentationTimeStamp

学新通

 意思是说每一帧的时间错,需要比前一帧的时间错要大,但是这里大多少没有说明。

原先我也是参考网上大多数的代码:

    frameCount ;

    CMTime presentationTimeStamp = CMTimeMake(frameCount, self->timescale);

 这里的self->timescale = 1000

这样的结果就是前面1000帧都是正常的码率,frameCount差不多接近1000的时候,码率会掉下来,大概80 B/s.

我试着增大 self->timescale = 10000,不行

然后我减少 self->timescale = 100

这时候码率稳定了,跟我设置的预期差不多。

另外还把kVTCompressionPropertyKey_DataRateLimits 这个参数设置为码率的5倍除以8,因为是字节为单位。

学新通 

最终的结果修改的地方:

1. 码率和上限设置:

学新通 

2. 时间戳的单位:

学新通

最终效果图:

推流上行码率:

学新通

拉流端:

 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbihic
系列文章
更多 icon
同类精品
更多 icon
继续加载