2017-04-25 60 views
2

我试图使用JSON和下面的代码片段发送POST请求到https://speech.googleapis.com/v1/speech:recognize。不知何故,谷歌回应说,在我的请求中无法解码Base 64。Google语音API的Base64解码失败

{ “配置”:{ “编码”: “LINEAR16”, “sampleRateHertz”:16000, “语言代码”: “JA-JP”, “maxAlternatives”:5, “profanityFilter”:假 }, “音频”:{ “内容”: “ZXCVBNM” }, }

String pcmFilePath = "/storage/emulated/0/Download/voice8K16bitmono.pcm"; 
    File rawFile = new File(pcmFilePath); 
    byte[] rawData = new byte[(int) rawFile.length()]; 
    DataInputStream input = null; 
    try { 
     input = new DataInputStream(new FileInputStream(rawFile)); 
     int readResult = input.read(rawData); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    if (input != null) { 
     input.close(); 
    }; 

    String base64 = Base64.encodeToString(rawData, Base64.DEFAULT); 
    String completePostBody = postBody.replace("ZXCVBNM" , base64); 

“代码”:400, “消息”:“在 'audio.content' 的值无效(TYPE_BYTE S),Base64解码失败,因为“...

有没有人有任何建议?

+0

本质上,它在消息中所说的。 'ZXCVBNM'无效(不完整)base64编码(部分解码为'epò',但不完整)。 Base-64将源(二进制)数据的每三个字符编码为4个编码数据字符。您只有七个字符,因此不完整(并且对于任何类型的音频表示也是可疑的短)。 – TripeHound

+0

我后来意识到,你正在用你的文件内容替换'ZXCVBNM'(我不知道Android足以知道你的代码是否正确读取文件)。然而,问题仍然是谷歌收到的是不是有效的base-64。尝试记录你实际发送的有效载荷中是否有意义。 (或者,可以想象,Googole并不期待base64(链接给我404)。 – TripeHound

+0

对于迟到的回复,我发送POST请求后跟随此文档:https://cloud.google.com/speech/reference/rest/v1/speech/recognition。可能是你想要访问的链接不是用于浏览器的,下面是我实际发送的有效负载的日志记录:http://www.mediafire.com/file/9qzxyzexlxc7jr1/ – ZodiacLeo123

回答

3

我设法从Google Speech API得到结果。

据记载,该基地64编码不应该有换行 链接:https://cloud.google.com/speech/docs/base64-encoding

改变从Base64.DEFAULTBase64.NO_WRAP在我的情况下工作。 此外pcm文件应该是LSB

+2

这是有道理的(一旦你意识到这一点),虽然你链接不作要求明显(这只是真正在Linux例子中提到)的文档,我怀疑使用'encodeToString()'(这似乎是一个合理事情),而不是一个'字节[]'因为他们在自己的Java例子做的是问题的一部分 - 它的默认显然是行包,大概是包含在电子邮件或类似 – TripeHound

+0

@ ZodiacLeo123可以。你详细说明了你的答案吗?我也遇到了这个问题。你是什么意思“不应该有换行链接“。我注意到,在我的base64有一些符号一样,'“+”','“=”','“\ n''和'” /''。这是问题吗?并且所有文件都应该用LSB编码? – hamdanjz4

+0

“不应该有换行链接”是从Google文档引用的句子。实际上,我使用Android Studio中的库来为我完成base 64编码。幸运的是,只有一个设置,它的工作。如果你打算手动编码,我想我不能帮你。而关于LSB,如果您的pcm文件使用MSB编码,Google将返回空json响应。 – ZodiacLeo123