You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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相关的关键词,找到对应内存缓存的对象
  • 展开对象找到databuffer属性,尝试导出二进制数据(部分版本的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 StorageMemory Cache,尝试导出缓存的视频数据

4. 视频帧提取小技巧

即使你提取到了部分缓存数据,视频流通常是H.264这类编码,单帧数据以0x00 00 00 010x00 00 01开头(NAL单元标记),你可以用十六进制编辑器(比如HxD)搜索这些标记,截取从标记开始到下一个标记结束的内容,保存为.h264文件,再用播放器或FFmpeg转成图片帧。

备注:内容来源于stack exchange,提问作者sdbbs

火山引擎 最新活动