GetMedia не возвращает полезную нагрузку с тегами AWS MKV? - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь создать свой собственный анализатор потоков, используя библиотеку Kinesis Video Stream. Я хотел бы разобрать фрагменты и затем записать .mkv на диск. В соответствии с примером я пытаюсь использовать FragmentMetadataVisitor, чтобы получить следующий номер фрагмента для выполнения последующего GetMediaRequest. Отладка, похоже, что ни один из MkvElements не содержит метаданных «TAG». Также, глядя на исходный код, похоже, что FragmentMetadataVistior игнорирует теги AWS:

       public void visit(MkvDataElement dataElement) throws MkvElementVisitException {
            if (mkvTagProcessor.isPresent()) {
                if (MkvTypeInfos.TAGNAME.equals(dataElement.getElementMetaData().getTypeInfo())) {
                    tagName = getMkvElementStringVal(dataElement);
                } else if (MkvTypeInfos.TAGSTRING.equals(dataElement.getElementMetaData().getTypeInfo())) {
                    tagValue = getMkvElementStringVal(dataElement);
                }
                if (tagName != null && tagValue != null) {
                    // Only process non-internal tags
                    if (!tagName.startsWith(AWS_KINESISVIDEO_TAGNAME_PREFIX)) {
                        mkvTagProcessor.get().process(new MkvTag(tagName, tagValue), currentFragmentMetadata);
                    }
                    // Empty the values for new tag
                    tagName = null;
                    tagValue = null;
                }
            }
        }
    }

Я использую BasicMkvTagProcessor для обработки тегов. Однако при отладке метод процесса (тег, метаданные) никогда не вызывается. Я использую FragmentMetadataVisitor следующим образом:

 StreamingMkvReader streamingMkvReader =
                StreamingMkvReader.createDefault(new InputStreamParserByteSource(result.getPayload()));

        try(WritableByteChannel channel = FileChannel.open(generatePath(), StandardOpenOption.APPEND,StandardOpenOption.CREATE)){

            while(streamingMkvReader.mightHaveNext()){
                Optional<MkvElement> nextItem = streamingMkvReader.nextIfAvailable();

                if(nextItem.isEmpty()){
                    return Optional.empty();
                }

                MkvElement item = nextItem.get();

                /*Write to file*/

        } catch(IOException e){
            throw new RuntimeException("Failed to create file.", e);
        } catch(MkvElementVisitException e){
            throw new RuntimeException("An error occurred while writing MkvElement to file.");
        }

        return /*new StartSelector for next fragment using fragmentMetadataVisitor.getCurrentFragmentMetadata() to find the last fragment number*/;
    }

Учитывая это, есть ли другой класс, который я должен использовать для извлечения метаданных AWS, описанных в документации GetMedia? Или я недоразумение?

1 Ответ

0 голосов
/ 30 апреля 2020

AWS только что добавил API GetClip, который я могу использовать вместо него.

https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetClip.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...