GetMedia不返回带有AWS MKV标签的有效载荷吗?

问题描述 投票:1回答:1

我正在尝试使用Kinesis Video Stream库创建自己的流解析器。我想解析这些片段,然后将.mkv写入磁盘。按照示例,我尝试使用FragmentMetadataVisitor获取下一个片段编号,以执行后续的GetMediaRequest。调试时,似乎所有MkvElement都不包含“ 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处理标签。但是,调试时,永远不会调用process(tag,元数据)方法。我正在像这样使用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*/;
    }

鉴于此,我是否应该使用另一个类来提取GetMedia文档中描述的AWS元数据?还是我误会了?

java amazon-web-services amazon-kinesis-video-streams
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.