Erstens: Ich weiß bereits, dass es eine kontinuierliche 65-Sekunden-Spracherkennung mit dieser API gibt. Mein Ziel ist es NICHT, diese 65 Sekunden zu verlängern. Meine App: Es nutzt Google Streaming-Spracherkennung, basierte ich meinen Code auf diesem Beispiel: https://github.com/GoogleCloudPlatform/android-docs-samples/tree/master/speech Die App funktioniert ziemlich gut, ich bekomme ASR Ergebnisse und zeigen sie auf dem Bildschirm, wie der Benutzer spricht, Siri Stil.Google Speech Cloud-Fehler bei Android: OUT_OF_RANGE: Überschreitung der maximal zulässigen Stream-Dauer von 65 Sekunden
Das Problem: Mein Problem kommt, nachdem die ASR-Taste auf meiner app mehr tippte, Stoppen und die ASR SpeechService Neustart ist ein bisschen unzuverlässig. Schließlich bekomme ich diesen Fehler:
io.grpc.StatusRuntimeException: OUT_OF_RANGE: Exceeded maximum allowed stream duration of 65 seconds.
... als ob die SpeechService wurde nicht ordnungsgemäß heruntergefahren nach mehreren stoppen, neu starten Zyklen.
Mein Code: Ich stoppe meinen Code so, ich vermute das Problem irgendwo in der Implementierung meiner StopStreamingASR-Methode. Ich laufe es auf einem separaten Thread, weil ich glaube, dass die Leistung verbessern kann (in der Hoffnung ich bin nicht falsch):
static void StopStreamingASR(){
loge("stopGoogleASR_API");
//stopMicGlow();
//Run on separate thread to keep UI thread light.
Thread thread = new Thread() {
@Override
public void run() {
if(mSpeechService!=null) {
mSpeechService.finishRecognizing();
stopVoiceRecorder();
// Stop Cloud Speech API
if(mServiceConnection!=null) {
try {
app.loge("CAUTION, attempting to stop service");
try {
mSpeechService.removeListener(mSpeechServiceListener);
//original mActivity.unbindService(mServiceConnection);
app.ctx.unbindService(mServiceConnection);
mSpeechService = null;
}
catch(Exception e){
app.loge("Service Shutdown exception: "+e);
}
}
catch(Exception e){
app.loge("CAUTION, attempting to stop service FAILED: "+e.toString());
}
}
}
}
};
thread.start();
}
private static void stopVoiceRecorder() {
loge("stopVoiceRecorder");
if (mVoiceRecorder != null) {
mVoiceRecorder.stop();
mVoiceRecorder = null;
}
}
Bin ich den Dienst richtig, um Anhalten der 65 zweite Grenz Fehler zu vermeiden? Irgendwelche Empfehlungen?
ich das gleiche Problem bin zu stoßen. Hast du irgendwann etwas gefunden? – Frank
@Frank Noch nicht! Ich löse einige leichtere Fehler, während ich mir eine Idee für dieses 65-sekündige Problem einstelle. Lass es mich wissen, wenn du etwas entdeckst, werde ich auch! – Josh