public static ByteBuffer getByteBufferFromStream()

in source/aws-connect-vm-serverless/src/main/java/com/amazonaws/kvstream/KVSUtils.java [102:139]


    public static ByteBuffer getByteBufferFromStream(StreamingMkvReader streamingMkvReader,
                                                     FragmentMetadataVisitor fragmentVisitor,
                                                     FragmentMetadataVisitor.BasicMkvTagProcessor tagProcessor,
                                                     String contactId) throws MkvElementVisitException {

        while (streamingMkvReader.mightHaveNext()) {
            Optional<MkvElement> mkvElementOptional = streamingMkvReader.nextIfAvailable();
            if (mkvElementOptional.isPresent()) {

                MkvElement mkvElement = mkvElementOptional.get();
                mkvElement.accept(fragmentVisitor);

                // Validate that we are reading data only for the expected contactId at start of every mkv master element
                if (MkvTypeInfos.EBML.equals(mkvElement.getElementMetaData().getTypeInfo())) {
                    if (mkvElement instanceof MkvStartMasterElement) {
                        String contactIdFromStream = getContactIdFromStreamTag(tagProcessor);
                        if (contactIdFromStream != null && !contactIdFromStream.equals(contactId)) {
                            //expected Connect ContactId does not match the actual ContactId. End the streaming by
                            //returning an empty ByteBuffer
                            return ByteBuffer.allocate(0);
                        }
                        tagProcessor.clear();
                    }
                } else if (MkvTypeInfos.SIMPLEBLOCK.equals(mkvElement.getElementMetaData().getTypeInfo())) {
                    MkvDataElement dataElement = (MkvDataElement) mkvElement;
                    Frame frame = ((MkvValue<Frame>) dataElement.getValueCopy()).getVal();
                    ByteBuffer audioBuffer = frame.getFrameData();
                    long trackNumber = frame.getTrackNumber();
                    MkvTrackMetadata metadata = fragmentVisitor.getMkvTrackMetadata(trackNumber);
                    if (TrackName.AUDIO_FROM_CUSTOMER.getName().equals(metadata.getTrackName())) {
                        return audioBuffer;
                    }
                }
            }
        }

        return ByteBuffer.allocate(0);
    }