Firefox about:cache-entry参数设置及内存缓存视频帧提取方案咨询
Firefox about:cache-entry参数设置及内存缓存视频帧提取方案咨询
我完全懂你现在的无奈——手机端IP摄像头APP崩了,唯一的视频线索就在Firefox的内存缓存里,却卡在了无法导出、甚至看不到完整十六进制dump的环节。结合我之前折腾Firefox缓存的经验,给你梳理下可行的思路:
一、关于about:cache-entry的URL参数
首先得说,Firefox的about:系列页面参数大多是非官方公开的,不同版本可能有差异,而且针对大文件(比如你这个4MB左右的视频缓存),Firefox默认会跳过完整的十六进制dump,避免页面卡死或内存溢出。
不过社区里有过一些尝试,你可以试试在about:cache-entry的URL末尾追加以下参数,看是否能分片获取缓存内容:
&offset=XXX:指定从缓存的第XXX字节开始读取&length=YYY:指定读取YYY字节长度的内容
比如你可以构造这样的URL:
about:cache-entry?storage=memory&context=O^privateBrowsingId=1&partitionKey=%28http%2C10.0.XXXXXXXX%2C8080%29,p,&eid=&uri=http://10.0.XXXXXXXX:8080/video&offset=0&length=4096
注意:这些参数没有官方文档保障,在Firefox 118版本可能有效,也可能失效,只能尝试。如果还是看不到dump,那大概率是Firefox对大缓存条目做了限制,这条路走不通。
二、其他提取内存缓存视频帧的可行方案
既然about:cache-entry走不通,咱们换几个思路:
1. 利用Firefox开发者工具的内存快照
- 打开Firefox的开发者工具(按F12),切换到Memory面板
- 点击Take snapshot生成当前Firefox的内存快照(这个过程可能需要几秒,耐心等)
- 快照生成后,在搜索框输入
Cache或者video相关的关键词,找到对应内存缓存的对象 - 展开对象找到
data或buffer属性,尝试导出二进制数据(部分版本的DevTools支持直接复制二进制内容,或者可以通过控制台代码提取)
2. 硬核内存提取(适合Windows系统)
如果Firefox还没关闭,缓存还在内存里,可以用工具直接从进程内存中提取:
- 下载Process Explorer或Cheat Engine这类进程内存查看工具
- 找到Firefox的进程(通常是
firefox.exe),附加到进程 - 搜索缓存的字节数(4193198),定位到对应的内存区域
- 直接导出这段内存为二进制文件,之后可以用视频分析工具(比如FFmpeg)打开,提取其中的帧
3. 远程调试法
- 关闭所有Firefox窗口,然后用命令行启动Firefox,加上远程调试参数:
firefox.exe --remote-debugging-port=9222 - 打开另一个浏览器(比如Chrome或Firefox),访问
http://localhost:9222,进入远程调试界面 - 找到对应的标签页,在Application面板中查看Cache Storage或Memory Cache,尝试导出缓存的视频数据
4. 视频帧提取小技巧
即使你提取到了部分缓存数据,视频流通常是H.264这类编码,单帧数据以0x00 00 00 01或0x00 00 01开头(NAL单元标记),你可以用十六进制编辑器(比如HxD)搜索这些标记,截取从标记开始到下一个标记结束的内容,保存为.h264文件,再用播放器或FFmpeg转成图片帧。
备注:内容来源于stack exchange,提问作者sdbbs




