当前位置: 首页 > 知识库问答 >
问题:

带有AWS Kinesis视频流C#的InvalidSignatureException

宁良平
2023-03-14

我正试图执行我自己的HTTP签名请求,因为C#中没有用于AWS Kinesis视频流的PutMedia API的SDK,但我得到以下错误消息:

            var streamName = "audio-stream-test";
            var service = "kinesisvideo";
            var endpoint = GetPutMediaEndpoint(streamName);
            var host = GetHostFromEndpoint(endpoint);
            var region = GetRegionFromEndpoint(endpoint);

            var t = DateTime.UtcNow;
            var canonical_uri = $"{endpoint}/putMedia";

            var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, new Uri(canonical_uri));
            httpRequestMessage.Headers.Add("connection", "keep-alive");
            httpRequestMessage.Headers.Add("host", host);
            httpRequestMessage.Headers.Add("Transfer-Encoding", "chunked");
            httpRequestMessage.Headers.Add("user-agent", "AWS-SDK-KVS/2.0.2");
            httpRequestMessage.Headers.Add("x-amzn-fragment-acknowledgment-required", "1");
            httpRequestMessage.Headers.Add("x-amzn-fragment-timecode-type", "ABSOLUTE");
            httpRequestMessage.Headers.Add("x-amzn-producer-start-timestamp", (t - DateTime.MinValue).TotalMilliseconds.ToString());
            httpRequestMessage.Headers.Add("x-amzn-stream-name", streamName);
            httpRequestMessage.Headers.Add("x-amz-security-token", sessionToken);

            var byteArray = File.ReadAllBytes(filePath);
            var content = new ByteArrayContent(byteArray);
            httpRequestMessage.Content = content;

            var httpClient = new HttpClient();

            var aws4RequestSigner = new AWS4RequestSigner(accessKey, secretAccessKey);
            var signedHttpRequestMessage = aws4RequestSigner.Sign(httpRequestMessage, service, region).Result;
            var httpResponseMessage = httpClient.SendAsync(signedHttpRequestMessage);

共有1个答案

杜正奇
2023-03-14

伪代码的两个潜在问题。

  1. 如果使用会话令牌,则请求签名不仅应包括访问密钥/秘密访问密钥组合,还应包括会话令牌。
  2. PutMedia的主体是“无尽的”,因为它是实时流。因此,数据不应该包括在签名计算中。
 类似资料:
  • 我有一个blob数组(实际上是二进制数据--我可以表达它是最有效的。我现在使用Blobs,但可能或其他更好的方法)。每个Blob包含1秒的音频/视频数据。每秒都会生成一个新的Blob并将其追加到我的数组中。因此代码大致如下所示: 我的目标是将此音频/视频数据流式传输到HTML5元素。我知道Blob URL可以像下面这样生成和播放:

  • 我使用aws kinesis video stream webRTC在reactjs中进行视频聊天。一切都很好。但是我想把视频存储在s3 Bucket中。我应该如何实现这个视频存储?

  • 希望大家知道这真的是一个FAQ,而不是一些列出的我个人喜欢的问题集;我不喜欢技术话题的视频,我发现视频容易分心,并且经常包括一些微小的口头上的技术错误。 B. Stroustrup, H. Sutter, H-J. Boehm, A. Alexandrescu, S.T.Lavavej, Chandler Carruth, and Andrew Sutter: several talks and

  • 我试图从覆盆子派流视频使用aws kinesis视频流。我们在Aws站点上使用了C++sdk(https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp) [错误][19-04-2020 19:20:33:859.598 GMT]createKinesisVideoStreamSync():未能创建Kinesis

  • 我有一个基于AWS的web应用程序。客户端使用Angular 1.5.3用JavaScript编写 null 我已经找到了这篇教程:http://docs.aws.amazon.com/amazoncloudfront/latest/developerguide/tutorialstreamingjwplayer.html,但不幸的是,这篇教程没有多大用处,因为它描述了如何从公共bucket进行流