【问题标题】:GetMedia does not return payload with AWS MKV tags?GetMedia 不返回带有 AWS MKV 标签的有效负载?
【发布时间】:2020-08-12 20:37:42
【问题描述】:

我正在尝试使用 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 来处理标签。但是,在调试过程中, process(tag, metadata) 方法永远不会被调用。我像这样使用 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】:

    AWS 刚刚添加了我可以使用的 GetClip API。

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

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 2022-11-19
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多