in src/main/java/com/amazonaws/kinesisvideo/client/PutMediaClient.java [104:144]
private Consumer<OutputStream> sendChunkEncodedMvkStream(final int fragmentThrottle) {
return new Consumer<OutputStream>() {
@Override
public void accept(final OutputStream rawOutputStream) {
FileOutputStream outputFileStream = null;
try {
final OutputStream throttledOutputStream = throttleAndMeasureOutput(rawOutputStream);
outputFileStream = createOutputFileStream();
final byte[] buffer = new byte[BUFFER_SIZE];
int mkvBytesRead;
long counter = 0;
boolean continueLoop = true;
while (continueLoop) {
mkvBytesRead = mBuilder.mMkvStream.read(buffer);
counter++;
if (counter % LOGGING_INTERVAL == 0) {
log.debug("Sending data, counter : " + counter);
}
if (mkvBytesRead == -1) {
log.info("End-of-stream is reported. Terminating...");
continueLoop = false;
} else {
throttledOutputStream.write(ChunkEncoder.encode(buffer, mkvBytesRead));
tryWriteToFile(outputFileStream, buffer, mkvBytesRead);
if (fragmentThrottle > 0) {
Thread.sleep(fragmentThrottle);
}
}
}
throttledOutputStream.write(ChunkEncoder.encode(buffer, 0));
rawOutputStream.flush();
log.debug("Data sent. counter : " + counter);
} catch (final Exception e) {
log.debug("Exception while sending data.", e);
throw new RuntimeException("Exception while sending encoded chunk in MKV stream ! ", e);
} finally {
tryCloseOutputFileStream(outputFileStream);
}
}
};
}