private boolean startStreaming()

in lca-ai-stack/source/kvs_transcribe_streaming/src/main/java/com/amazonaws/kvstranscribestreaming/KVSRecordingTask.java [156:209]


    private boolean startStreaming(boolean transcribeEnabled, KVSStreamTrackObject kvsStreamTrackObject,
        Optional < String > languageCode, String callId, String channel,
        String streamName, Optional < Boolean > saveCallRecording) throws Exception {

        boolean isKVSTimedOut = false;

        if (transcribeEnabled) {
            try (TranscribeStreamingRetryClient client = new TranscribeStreamingRetryClient(getTranscribeCredentials(),
                TRANSCRIBE_ENDPOINT, TRANSCRIBE_REGION, metricsUtil)) {

                logger.info("Calling Transcribe service..");
                CompletableFuture < Void > transcribeResult = null;

                if (kvsStreamTrackObject != null) {
                    transcribeResult = getStartStreamingTranscriptionFuture(kvsStreamTrackObject,
                        languageCode, callId, channel, client, segmentWriter, statusWriter, EVENT_SOURCING_TABLE_NAME);
                }

                // Synchronous wait for stream to close, and close client connection
                // Timeout of 42 minutes because the Max connection duration of Amazon Kinesis Video Streams is 45 mins. The backend closes the connection after this time. The SDK rotates the token and establishes a new connection within this time.

                if (null != transcribeResult) {
                    transcribeResult.get(2520, TimeUnit.SECONDS);
                }


            } catch (TimeoutException e) {
                logger.info("Timing out KVS to Transcribe Streaming after 42 minutes");
                isKVSTimedOut = true;
            } catch (Exception e) {
                logger.error("Error during streaming: ", e);
                throw e;

            } finally {
                if (kvsStreamTrackObject != null && !isKVSTimedOut) {
                    closeFileAndUploadRawAudio(kvsStreamTrackObject, callId, channel, saveCallRecording);
                }
            }
        } else {
            try {
                logger.info("Saving audio bytes to location");

                //Write audio bytes from the KVS stream to the temporary file
                if (kvsStreamTrackObject != null) {
                    writeAudioBytesToKvsStream(kvsStreamTrackObject, callId);
                }
            } finally {
                if (kvsStreamTrackObject != null) {
                    closeFileAndUploadRawAudio(kvsStreamTrackObject, callId, channel, saveCallRecording);
                }
            }
        }
        return isKVSTimedOut;
    }