本帖最后由 xhx520 于 2023-2-20 19:38 编辑
开始
最近发现某威更新版本了,12版本才搞出来就过时了:'(weeqw ,基于对新技术的热情,迫不及待的开始了13版本的分析之路
1.首先当然是先按照12版本的思路分析,12版本的wasm解密函数为_get,发现13版本改为了_sendData。
2.之后就是对_sendData一顿分析,发现在$func2523函数中解密了pts;然后就懵逼了,解密后的数据播放只有音频,没有画面,道听途说是加密了es流,一顿废寝忘食的分析后还是一无所获,只能大概猜测ts解复用是直接用的ffmpeg(原来是js解复用),这下就难倒了小白我了。
3.一条路走不通只能另辟蹊径了,12版本就知道是wasm解码视频为一帧一帧的图片后,再用canvas绘制播放。那么我们能不能也这样做,把一帧一帧的图片保存下来,再合成为视频。有了这个思路,实现就比较简单了。
4.选择使用electron来实现,直接new Worker加载官方js,postMessage发送所需参数来获取每一帧图片的yuv数据及音频数据,通过yuv-canvas绘制图片并调用nodejs的fs库保存图片,通过ffmpeg命令合并图片为ts,最后合并ts为mp4即可
ffmpeg图片转视频命令:
ffmpeg -r 视频帧率 -f image2 -i %d.png -i 音频数据 -b:v 码率(我设置的10M) 0.ts -y
存在的问题
1.效率很差,特别是分辨率较大的视频(wasm解码视频很耗时)
2.合成视频较大,因为视频码率设置的高(低了视频就模糊了),暂时不知道咋办
总结
该方案只能算投机取巧的方式了,且视频质量较差,无非是没有办法的办法了。听说有巨佬还原出算法了,只能怪自己太菜。
20230220更新:
1.yuv绘制为图片再转视频效率太差了,可以直接保存yuv流数据,再用ffmpeg命令转为ts,可以提升一点点效率
|