浏览器flv.js实时播放rtsp转码视频,浏览器内存泄露问题排查并解决

背景:

由于浏览器无法直接播放rtsp协议,需要通过转码服务进行推送给前端,技术采用的转码服务+websocket+flv进行浏览器播放,有很多现场都没有出现浏览器崩溃的情况,最近遇到一个现场反馈说系统经常崩溃,无法打开,最后排查的原因是客户的浏览器直接崩溃了,经过和客户沟通复现这一过程,反向客户有个使用习惯,打开实时视频不会关闭,也不会刷新,就一直播放;这时就针对这个视频播放模块排查,发现浏览器内存持续增加,不会主动释放,页面刷新后,浏览器内存就下来了,这时怀疑内存泄露了,至于其他现场没问题,应该是打开一会就主动关闭了,所以间接没出现这个问题,既然问题出现了,就行优化:

在我的理解,由于websocket一直在推送视频流,说明播放器绝对有个缓存数据用来缓冲视频流数据,应该是这块数据缓冲区没有来的及进行释放,然后问题反馈到前端负责人,最后排查确实是这个原因,由于flvjs用的是bilibili的 flvjs,查看了相关文档确实有这块的设置,我把部分设置拿出来:

bash 复制代码
 flvOptionalConfig: {
          enableWorker: true,
          enableStashBuffer: true, //启用缓存
          stashInitialSize: 4096, //缓存大小4m
          lazyLoad: false,
          lazyLoadMaxDuration: 40 * 60,
          autoCleanupSourceBuffer: true,
          autoCleanupMaxBackwardDuration: 3 * 60,
          autoCleanupMinBackwardDuration: 1 * 60,
        }

这里配置有三个比较重要的:

autoCleanupSourceBuffer: true,

是否开启自动处理

autoCleanupMaxBackwardDuration: 3 * 60,

当向后缓冲区持续时间超过此值(以秒为单位)时,对SourceBuffer执行自动清理

autoCleanupMinBackwardDuration: 1 * 60,

指示在执行自动清理时为向后缓冲区保留的持续时间(以秒为单位)。

如果采用其他的组件,原理应该都差不过,自行阅读文档或者源码进行设置

相关推荐
换个昵称都难2 小时前
webrtc 音频模块FEC模块
网络·音视频·webrtc
qq_366566502 小时前
视频配音自动化Pipeline:TTS选型+音色克隆+批量处理(附完整代码)
自动化·新媒体运营·音视频·音频
hz567897 小时前
公安局远程办案用什么音视频系统?安全取证与多方协同方案
安全·架构·云计算·音视频·实时音视频·信息与通信
Championship.23.247 小时前
Linux 3.0 音频机制深度解析:ALSA基础架构与传统音频驱动模型
linux·运维·音视频·alsa
VOOHU-沃虎8 小时前
PoE+音频一体化接口设计:从电源变压器到XLR卡侬座的完整链路
音视频
“码”力全开10 小时前
解密企业级智能视频中台:基于 Docker 与边缘计算的 GB28181/RTSP 异构架构设计(支持源码交付)
docker·音视频·边缘计算
潜创微科技10 小时前
QCW5007+QCW5004 | HDMI 1.3 无线投屏芯片方案空旷 150 米支持穿墙传输
音视频
MemoriKu11 小时前
Flutter 相册 APP 视频模态稳定化实战:从视频抽帧、Embedding 元数据到 Android 真机启动修复
android·开发语言·前端·flutter·架构·音视频·embedding
EasyDSS11 小时前
视频直播点播/高清点播/音视频点播/云点播/云直播EasyDSS一站式音视频平台助力智慧校园智能化建设
音视频
johnny23311 小时前
视频创作工具:OpenCut、HyperFrames、social-auto-upload、OpenStoryline、ArcReel
音视频