
iOS,Android에서 GoogleSTT를 사용할 일이 생겼다.
문제는 스트림에대한 제한시간이 305초가 한계였다.
Google 문서의 이 페이지에서 말씀하신 제한 시간이 5분인 것을 확인할 수 있습니다. https://cloud.google.com/speech-to-text/quotas?hl=en
그래서 내가 우선적으로 생각한 해결 방안이다.
처음 iOS에서 구현할때 싱글톤패턴으로 구현하여
앱 델리게이트에서 2개이상의 AudioController를 부여받게될경우 에러가났다.
따라서 해당 싱글톤패턴을 제거하고 새롭게 코드를 짜고, 아래와 같은 시나리오로 에러를 해결했다.
1. 첫 번째 음성 인식기(speechRecognizer) 동작:
- 처음 4분 30초 동안 음성을 인식하고 수집합니다
2. 전환 구간 설정:
- 4분 30초가 되면 두 번째 음성 인식기(speechRecognizer2)가 활성화됩니다
- 이때 10초간의 중요한 전환 기간이 있습니다 (4분 30초 ~ 4분 40초)
- 이떄는 speechRecognizer과 speechRecognizer2가 동시에 음성을 수집합니다.
3. 전환 시나리오:
a) 4분 30초 ~ 4분 39초 사이에 번역이 발생하는 경우:
b) 4분 40초 이후에 번역이 발생하는 경우:
- 첫 번째 음성 인식기(speechRecognizer)의 데이터를 사용하여 번역을 진행합니다
- speechRecognizer의 데이터 + 추가 10초간 수집된 데이터를 speechRecognizer2로 전달합니다
- 첫 번째 speechRecognizer는 종료됩니다
- speechRecognizer2가 이어서 음성 인식을 담당합니다
4. 반복 과정:
- speechRecognizer2도 동일한 과정을 반복합니다
- 즉, 4분 30초 사용 후 다시 새로운 인식기로 전환하는 과정을 반복합니다
그리고 더 찾아본결과
아래는 구글 자체에서 해결한 방식이다.
연결을 브릿징스왑을 통해 해결한 방식이다.
https://cloud.google.com/speech-to-text/docs/transcribe-streaming-audio?hl=en#endless-streaming