吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 361|回复: 3
收起左侧

[已解决] 【已解决】有关OKHTTP与APIPost返回的字节流不同的问题

[复制链接]
未晴雾香 发表于 2024-10-12 00:09
本帖最后由 未晴雾香 于 2024-10-12 19:18 编辑

最近在使用Java的okhttp调用OpenAi的speech生成语音接口,生成的语音音频一直报错,经过反复调试代码,一直显示语音文件损坏等等错误。
dc5ece940f6783b3293e222d3259fe58.png
而使用API Post进行调用接口,返回音频可以正常播放。

下面是一段curl:

curl --request POST \
  --url https://api.openai.com/v1/audio/speech \
  --header 'Accept: */*' \
  --header 'Accept-Encoding: gzip, deflate, br' \
  --header 'Authorization: Bearer ********************' \
  --header 'Connection: keep-alive' \
  --header 'Content-Type: application/json' \
  --header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0' \
  --data '{
    "model": "tts-1",
    "input": "你好,有什么可以帮助你的",
    "voice": "alloy"
}'

下面是我的Java代码:


// textToSpeech是上面datad的实体类
String requestString = JSON.toJSONString(textToSpeech);

        Request request = new Request.Builder()
                .header("Authorization", "Bearer " + apiKey)
                .url(ValidateUtil.concatUrl(baseUrl, openAiConfig.getSpeechUrl()))
                .post(RequestBody.create(MediaType.parse("application/json"), requestString))
                .build();

        // 发送请求并获取响应
        try (Response response = okHttpClient.newCall(request).execute()) {
            // 检查响应是否成功
            if (!response.isSuccessful()) {
                throw new IOException("Unexpected code " + response);
            }

            // 获取响应体
            ResponseBody responseBody = response.body();
            if (responseBody != null) {
                InputStream inputStream = responseBody.byteStream();
                return inputStream;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

问题排查:

通过Java调用,返回的InputStream如下图:
7a9a685d92b122aa473271a395b6ebac.png

而api post调用的结果如下:
10f64069012036ce0e5d24b9cc9afd2c.png

因为mp3音频的前几个字节FF F3 E4 C4,所以可以知道okhttp这里获取的是错误的字节流。

经过多方面的查找和问AI,一直没有找到造成的原因和解决方案。因此求助站内各位大佬,请求各位大佬帮助

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xuanle 发表于 2024-10-12 08:29
会不会返回的是压缩的字节流
不知道改成啥 发表于 2024-10-12 09:05
本帖最后由 不知道改成啥 于 2024-10-12 09:07 编辑

java里面没启用这个吧  --header 'Accept-Encoding: gzip, deflate, br' \
.header("Content-Encoding", "gzip")

.addInterceptor(new GzipRequestInterceptor())//开启Gzip压缩
 楼主| 未晴雾香 发表于 2024-10-12 11:14
不知道改成啥 发表于 2024-10-12 09:05
java里面没启用这个吧  --header 'Accept-Encoding: gzip, deflate, br' \
.header("Content-Encoding", " ...

大佬,我试过了,这个方法也不行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表