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

博客讲述了作者在iOS15更新后遇到线上APP视频模糊的问题,经过排查发现是码率设置接口在新系统上不适用导致。通过调整码率设置、时间戳处理以及DataRateLimits参数,最终解决了视频模糊问题,确保了码率的稳定。文章详细记录了解决过程,并提供了关键代码片段和调整策略。
摘要由CSDN通过智能技术生成

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. 时间戳的单位:

最终效果图:

推流上行码率:

 

拉流端:

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值