project-mirai / mirai-api-http

Mirai HTTP API (console) plugin
GNU Affero General Public License v3.0
1.65k stars 345 forks source link

发送语音链接,导致mirai崩溃 #690

Closed YenHarvey closed 1 year ago

YenHarvey commented 1 year ago

问题描述

控制台崩溃页面

image

已经装了https://github.com/project-mirai/mirai-silk-converter 这个插件,可将音频自动转换为QQ所支持的形式。

崩溃产生过程

发送百度tts的音频是可以正常发送的,百度的音频链接格式如下:http://tsn.baidu.com/text2audio?tex=这是一个测试&tok=24.b1e2dd6d1caafc582528848bc54abc9b.2592000.1679484065.282335-30440650&cuid=a2fd6PYTHONdasjkhjgg245&ctp=1&lan=zh&spd=6&per=103

image

报错的音频链接格式如下:https://sayashi-vits-uma-genshin-honkai.hf.space/file=/tmp/tmpk13nrb_w/tmpujff2_ce.wav,音频是可以正常播放的,链接也是可访问的,但是发送mirai就崩溃。 image

详细信息

已安装插件: image

只使用了本项目的http接口。

报错日志:log链接:https://pan.baidu.com/s/1OA1ZN5NiwEZ_5g3hEMghLg 提取码:2a1v

此时mirai控制台日志并没有任何关于此错误的记录: image image

论坛中讨论的记录

ryoii commented 1 year ago

我感觉它比较像是 mirai-silk-converter 的问题

ryoii commented 1 year ago

测试了下,可以通过 mirai 下载,日志里最后崩溃的地方也在 mirai-silk-converter 的地址访问奔溃,排除没有数据的问题,大概是 native 哪里奔溃了,你本地正确安装 FFmpeg了么

YenHarvey commented 1 year ago

测试了下,可以通过 mirai 下载,日志里最后崩溃的地方也在 mirai-silk-converter 的地址访问奔溃,排除没有数据的问题,大概是 native 哪里奔溃了,你本地正确安装 FFmpeg了么

装了的,百度的那个链接(MP3格式),是可以正常发送的,链接直接带音频后缀的在我这都会崩溃,不管是MP3还是wav。那我明天试试把那个mirai-silk-converter删了再排查一下,看会不会崩溃。

YenHarvey commented 1 year ago

测试了下,可以通过 mirai 下载,日志里最后崩溃的地方也在 mirai-silk-converter 的地址访问奔溃,排除没有数据的问题,大概是 native 哪里奔溃了,你本地正确安装 FFmpeg了么

已经排除了,确实是mirai-silk-converter的问题,我已经把他给删了。想再问一下,QQ原生支持啥格式的音频?

cssxsh commented 1 year ago

@Karlatemp

我这边单元测试了一下,发现好像是 没有正常 throw 异常, native 里 直接 printStackTrace 了

io.github.kasukusakura.silkcodec.CoderException: SKP_Silk_Encode returned -2
    at io.github.kasukusakura.silkcodec.SilkCoder.encode(Native Method)
    at io.github.kasukusakura.silkcodec.SilkCoder.encode(SilkCoder.java:46)
    at io.github.kasukusakura.silkcodec.SilkCoder.encode(SilkCoder.java:36)
    at io.github.kasukusakura.silkcodec.SilkCoder.encode(SilkCoder.java:63)
    at io.github.kasukusakura.silkcodec.AudioToSilkCoder.connect(AudioToSilkCoder.java:98)
    at io.github.kasukusakura.silkcodec.AudioToSilkCoder.connect(AudioToSilkCoder.java:25)
    at net.mamoe.mirai.silkconverter.Data.convert0(SilkConverter.kt:46)
    at net.mamoe.mirai.silkconverter.SilkConverterImpl$convert$2.invoke(SilkConverter.kt:62)
    at net.mamoe.mirai.silkconverter.SilkConverterImpl$convert$2.invoke(SilkConverter.kt:62)
    at kotlinx.coroutines.InterruptibleKt.runInterruptibleInExpectedContext(Interruptible.kt:51)
    at kotlinx.coroutines.InterruptibleKt.access$runInterruptibleInExpectedContext(Interruptible.kt:1)
    at kotlinx.coroutines.InterruptibleKt$runInterruptible$2.invokeSuspend(Interruptible.kt:43)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)