Closed yujincheng08 closed 3 years ago
mirai的voice_codec参数是以文件头进行设置的,请确保文件头正确
这两个文件中,coolQ是
#!SILK_V3
而mirai是
我相信你将酷Q的文件重新上传会得到和酷Q一样的结果
@sandtechnology 实际上我就是用coolq那个文件,通过mirai转发出去的。不知为何会被二压成amr。
经测试,目前似乎并不能发出返回类型为1的语音,应是协议问题
Update: 直接改url倒是可以取到silk,不过这也就说明了发送时被当作amr然后被服务器二压了。 (顺便,如果你转发走的是httpapi的话,我发现我之前写了个bug可能导致url失效。)
@Hieuzest 我用的是CQHTTP-MIRAI所以可能关系不大。应该还是因为协议问题发送时候被当作AMR二压了
@Hieuzest 我用的是CQHTTP-MIRAI所以可能关系不大。应该还是因为协议问题发送时候被当作AMR二压了
目前只有httpapi是直接转发,CQHM的实现是二次上传的,所以导致你这里的两条url id不同
@Hieuzest 是这样的。另外我尝试改codec还是一个1.35K的amr
刚才直接发送 silkv3 格式语音,碰到了同样的问题。操作上和 https://github.com/mamoe/mirai/issues/548 相同,与转码设置无关(将转码的文件转换回去依然正常) 所以如果原因在于目前使用的 QQ for Android 协议的话,可能应该考虑合并这两个 issue(即:非直接转发消息时, silkv3 格式语音会被转码成 amr)
我没有办法测试(找不到能发silk的端)但简单测试转发消息也会 Any plan on this or start a new issue about the real voice sending?
已进行代码检查 传参及检测无问题 应该是协议问题 @yyuueexxiinngg
我测试时是直接把客户端发出来的format=1的Msg转发出去的,结果回来就format=0了
隔壁gocqhttp好像已经解决这个问题了
我是在kotlin上直接开发的,在提 #548之前单步调试只能看懂 区分SILK和AMR 后面就不太懂了 转码方法不变,以前用iotqq发送出的语音听起来是正常的,只是在qq上会显示成2秒而不是qq会员长语音 不知道和会员长语音的实现方式是否有关
此Issue @Mrs4s 或许可以提供些帮助
看了下go-cqhttp的更新, 好像把codec
重新填死为0了
https://github.com/Mrs4s/MiraiGo/commit/d3b0f5f9e8392504fc194584011c9c765ba204ab
不过当时的讨论是codec
填0可以发任何格式的语音, 但会导致PC端无法正常播放. 现在go-cqhttp那边的语音也有点问题
https://github.com/Mrs4s/go-cqhttp/issues/390
目前我手上没有能成功登录的帐号, 暂无法进行测试
已进行代码检查 传参及检测无问题 应该是协议问题 @yyuueexxiinngg
问题已找到,确实是上传时候某些参数不正确导致的,将会发送PR修复
备注:经过讨论确定问题是需要通过 highway 传输语音. 现在使用的 HTTP 接口总是会压缩
Highway (BDH) 上传已经实现, 现在可以尝试版本 2.2.0-dev-bdh-1
目前使用MIRAI1.2.2版本,今天测试语音时候,发现语音发送后会被二压。 原始语音数据为6.72KB,链接如下(通过coolq发送,可能会失效,失效看附件):
coolq.zip
而经过mirai发送之后,变成了1.35KB,链接如下(可能会失效,失效见附件):
mirai.zip
原文件的URL中有
voice_codec=1
,但是后面变成voice_codec=0
。并且在PC无法正常播放。 问题与#548 应该是一样的,但是被以编码问题而关闭。我认为这可能是上传时候某些参数不正确导致的,应该是协议问题。