【问题标题】:How to get metadata from Amazon Kinesis Video Streams via Video.js and http-streaming?如何通过 Video.js 和 http-streaming 从 Amazon Kinesis Video Streams 获取元数据?
【发布时间】:2018-12-25 09:32:59
【问题描述】:

现在,我正在开发 Amazon Kinesis Video Streams 的客户端,使用 video.js 和 http-streaming 来显示视频。

但是,在流服务器上,每个片段都有一些元数据(仅限文本)(如此链接:https://aws.amazon.com/about-aws/whats-new/2018/10/kinesis-video-streams-fragment-level-metadata-support/)。

我不知道如何使用 AWSJavaScriptSDK 获取这些数据(例如:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/KinesisVideoMedia.html)。

我已经使用 getMedia 功能进行了测试,但它没有按预期工作(只获取一次媒体信息,而不是每个片段)

var kinesisvideomedia = new AWS.KinesisVideoMedia({
                    //apiVersion: '2017-09-30',
                    region: options.region,
                    accessKeyId: options.accessKeyId,
                    secretAccessKey: options.secretAccessKey,
                    endpoint: response.DataEndpoint
                });
                //  3.  Create the parameters for getMedia()
                var mopts = {
                    StartSelector: {
                        StartSelectorType: 'EARLIEST'
                    },
                    StreamName: streamName
                };
                kinesisvideomedia.getMedia(mopts, function (error, vmresp) {
                    if (error) {
                        console.log(error);
                    }
                    //console.log(vmresp);
                });

非常感谢您的支持!

【问题讨论】:

    标签: aws-sdk video.js amazon-kinesis http-streaming


    【解决方案1】:

    您的参数仅告诉 getMedia 从流中获取最早的片段。如果您想获取以下所有片段,则必须在对 getMedia 进行其他调用时使用上一次调用 getMedia 的响应中返回的 ContinuationToken。

    关于片段级别的元数据,您需要解析响应负载,例如this example,使用video streams parser library

    【讨论】:

      【解决方案2】:

      getMedia 没有很好地记录在 js aws-sdk 中,主要技巧是使用 request.createReadStream() 来流式传输媒体块。

      你可以这样做

      var kinesisvideomedia = new AWS.KinesisVideoMedia();
      var kinesisvideo = new AWS.KinesisVideo();
      const params = {
        APIName: "GET_MEDIA",
        StreamName: streamName
      }
      kinesisvideo.getDataEndpoint(params, function(err, data) {
        if (err) {
          throw(err)
        }
        console.log("Changing endpoint to", data.DataEndpoint);
        kinesisvideomedia.endpoint = data.DataEndpoint;
        var mopts = {
          StartSelector: {
            StartSelectorType: 'EARLIEST'
          },
          StreamName: streamName
        };
        const request = kinesisvideomedia.getMedia(mopts);
        const stream = request.createReadStream();
        stream.on('data', function(data) { console.log("data", data)})
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-02
        • 1970-01-01
        • 2019-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 2021-01-13
        相关资源
        最近更新 更多