iOS 15 H264硬编码码率变小,图像模糊
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
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13