音视频学习-exceeded mem limit: ActiveHard 50 MB (fatal)
一、现象
ReplayKit2 适配中 UPLOAD进程被系统杀掉
日志中显示原因:exceeded mem limit: ActiveHard 50 MB (fatal)
二、内存占用分析
1)系统回调YUV数据(NV12类型)给到UPLOAD进程,回调方法运行在多线程中
1 | - ( void )processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType |
上述在多线程中带来两个问题:
第一个是一帧YUV图像在大屏手机上占用较大内存,比如iphone6+手机上,1242x2208x1.5 = 3.92MB;
此外因为多线程回调,如果直接将每帧图像都进行处理,可能进程中积累的内存较多,会直接内系统干掉
第二个是 多线程回调带来的一个时序的问题,系统给到的屏幕数据方向、尺寸不可控,如果对图像进行旋转,那么低端机型上面缩放旋转性能是否可接受
三、解决思路
将回调的YUV数据放在一个队列中,在一个线程中循环取YUV的数据,然后进行编码推流
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架