闲鱼发送二维码
闲鱼不支持发送二维码图片,即使本地显示发送成功,对方收到的只是一个违规图片的提醒。
所以大多数人都是选择录屏,然后将录制的视频发送给对方。
在图片较多的情况下,录屏就很麻烦,因为视频有长短限制,录制起来很耗时。
于是尝试使用ffmpeg将图片转成视频:
| ffmpeg -r 25 -loop 1 -i input.png -pix_fmt yuv420p -vcodec libx264 -vframes 250 -r 25 -t 10 output.mp4
ffmpeg -framerate 1 -f image2 -loop 1 -i images/%d.png -vcodec libx264 -pix_fmt yuv420p -r 25 -t 10 -y output.mp4
|
将转好的视频发送给对方后,有两个问题:
- 对方仍然收到“图片涉嫌违规”的提示
- 视频被压缩,很糊,二维码、图片都难以识别


于是尝试使用文件路径替换解决这两个问题。
思路也很简单,就是在生成视频封面、压缩视频后将文件替换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| XposedHelpers.findAndHookMethod("com.taobao.idlefish.multimedia.video.impl.recorder.FMBGVideoEditor", classLoader, "onEncoderFinished", new XC_MethodHook() { @Override protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); log("FMBGVideoEditor.onEncoderFinished()...."); String mp4_path = "/storage/emulated/0/Pictures/qr.mp4"; String dst = XposedHelpers.getObjectField(param.thisObject, "mEditOutputPath").toString(); log(dst); if(new File(mp4_path).exists()){ File source = new File(mp4_path); File target = new File(dst); source.renameTo(target); } } });
XposedHelpers.findAndHookMethod("com.taobao.idlefish.multimedia.video.impl.recorder.FMBGVideoEditor", classLoader, "renameFileNameWhenFromAlbum", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); log("FMBGVideoEditor.renameFileNameWhenFromAlbum()...."); String mp4_path = "/storage/emulated/0/Pictures/qr.mp4"; if(new File(mp4_path).exists()){ param.setResult(mp4_path); } } });
XposedHelpers.findAndHookMethod("com.taobao.idlefish.glfilter.core.utils.GLDebugUtil", classLoader, "b", "java.lang.String","android.graphics.Bitmap",int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); log("GLDebugUtil.b()...."); String cover_path = "/storage/emulated/0/Pictures/cover.jpg"; String dst = param.args[0].toString(); if(new File(cover_path).exists()){ File source = new File(cover_path); File target = new File(dst); source.renameTo(target); } } });
|