未晴雾香 发表于 2024-10-12 00:09

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

本帖最后由 未晴雾香 于 2024-10-12 19:18 编辑

最近在使用Java的okhttp调用OpenAi的speech生成语音接口,生成的语音音频一直报错,经过反复调试代码,一直显示语音文件损坏等等错误。

而使用API Post进行调用接口,返回音频可以正常播放。

下面是一段curl:
```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代码:
```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如下图:


而api post调用的结果如下:


因为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", " ...

大佬,我试过了,这个方法也不行
页: [1]
查看完整版本: 【已解决】有关OKHTTP与APIPost返回的字节流不同的问题