闲鱼发送二维码

闲鱼发送二维码

闲鱼不支持发送二维码图片,即使本地显示发送成功,对方收到的只是一个违规图片的提醒。

所以大多数人都是选择录屏,然后将录制的视频发送给对方。

在图片较多的情况下,录屏就很麻烦,因为视频有长短限制,录制起来很耗时。

于是尝试使用ffmpeg将图片转成视频:

1
2
3
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

将转好的视频发送给对方后,有两个问题:

  • 对方仍然收到“图片涉嫌违规”的提示
  • 视频被压缩,很糊,二维码、图片都难以识别

image-20231103125128076

image-20231103125245018

于是尝试使用文件路径替换解决这两个问题。

思路也很简单,就是在生成视频封面、压缩视频后将文件替换。

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);
}
}
});