

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 向 Amazon Kinesis 视频流发送数据
<a name="gs-send-data"></a>

本节介绍如何将媒体数据从摄像机发送到您在上一节中创建的 Kinesis 视频流。本节使用[使用 C\$1\$1 制作人库](producer-sdk-cpp.md)作为[示例：Kinesis Video Streams 制作人 GStreamer SDK 插件-kvssink](examples-gstreamer-plugin.md)插件。

要从各种操作系统上的各种设备发送媒体，本教程使用了 Kinesis Video Streams C\$1\$1 制作器库[GStreamer](https://gstreamer.freedesktop.org/)以及一个标准化摄像机和其他媒体来源访问的开源媒体框架。

**Topics**
+ [构建 SDK 和示例](#send-data-build-sdk)
+ [运行示例将媒体上传到 Kinesis Video Streams](#send-data-run-samples)
+ [查看确认对象](#gs-review-acks)

## 构建 SDK 和示例
<a name="send-data-build-sdk"></a>

您可以在计算机上或中构建 SDK 和示例 AWS Cloud9。请按照以下相应步骤操作。

------
#### [ Build on your computer ]

使用[自述文件](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp)中的说明来构建生产者库和示例应用程序。

这包括：
+ 安装依赖项
+ 克隆存储库
+ **CMake**用于生成 **makefile**
+ 使用 **mak** e 构建二进制文件

------
#### [ Build in AWS Cloud9 ]

请按照以下步骤上传到中的 Kinesis Video Stream AWS Cloud9 s。您无需将任何内容下载到您的计算机上。

1. 在里面 AWS 管理控制台，打开[AWS Cloud9](https://us-west-2.console.aws.amazon.com/cloud9control/home)。

   选择 “**创建环境**”。

1. 在 “**创建环境**” 屏幕上，完成以下操作：
   + **名称**-键入新环境的名称。
   + **平台** ——选择 **Ubuntu Server 22.0** 4 LTS。

   您可以将其他字段保留为默认选项。

1. 创建环境后，在 **Cloud9 IDE** 列中选择 “**打开**”。

   在屏幕的中间下方区域，你会看到`Admin:~/environment $`。这是 AWS Cloud9 （亚马逊 EC2）终端。
**注意**  
如果您不小心关闭了终端，请选择 “**窗口**”，“**新建终端**”。

   在终端中运行以下命令将音量更改为 20 GiB。

   1. 下载 脚本。

      ```
      wget https://awsj-iot-handson.s3-ap-northeast-1.amazonaws.com/kvs-workshop/resize_volume.sh
      ```

   1. 授予脚本执行权限。

      ```
      chmod +x resize_volume.sh
      ```

   1. 运行 脚本。

      ```
      ./resize_volume.sh
      ```

1. 获取有关您可以通过高级打包工具 (APT) 安装或更新的所有软件的最新信息。

   此命令不会更新软件本身，但可以确保您的系统知道最新的可用版本。

   ```
   sudo apt-get update
   ```

1. 安装 C\$1\$1 制作器 SDK 依赖项。

   ```
   sudo apt-get install -y cmake m4 git build-essential pkg-config libssl-dev libcurl4-openssl-dev \
   liblog4cplus-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
   gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-bad gstreamer1.0-plugins-good \
   gstreamer1.0-plugins-ugly gstreamer1.0-tools
   ```

1. 使用 git 克隆 C\$1\$1 制作器开发工具包。

   ```
   git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
   ```

1. 准备一个构建目录。

   ```
   cd amazon-kinesis-video-streams-producer-sdk-cpp
   mkdir build
   cd build
   ```

1.  CMake 用于生成生成文件。

   ```
   cmake .. -DBUILD_GSTREAMER_PLUGIN=TRUE -DBUILD_DEPENDENCIES=OFF
   ```

   预期输出的结尾如下所示：

   ```
   -- Build files have been written to: /home/ubuntu/environment/amazon-kinesis-video-streams-producer-sdk-cpp/build
   ```

1. 使用 make 编译 SDK 和示例应用程序，以及构建最终的可执行文件。

   ```
   make
   ```

   预期输出的结尾如下所示：

   ```
   [100%] Linking CXX executable kvs_gstreamer_file_uploader_sample
   [100%] Built target kvs_gstreamer_file_uploader_sample
   ```

1. 确认示例文件已构建。列出当前目录中的文件：

   ```
   ls
   ```

   确认是否存在以下文件：
   + kvs\$1gstreamer\$1sample
   + libgstkvssink.so

1. （可选）您可以将设置 GST\$1PLUGIN\$1PATH 环境变量添加到外壳程序的启动脚本中。这样可以确保在新的终端会话期间正确设置 GST\$1PLUGIN\$1PATH。在中 AWS Cloud9，外壳程序的启动脚本是:`~/.bashrc`.

   运行以下命令将该命令附加到 shell 启动脚本的末尾。

   ```
   echo "export GST_PLUGIN_PATH=~/environment/amazon-kinesis-video-streams-producer-sdk-cpp/build" >> ~/.bashrc
   ```

   键入以下内容以运行 shell 的启动脚本：

   ```
   source ~/.bashrc
   ```

   确认已设置 GST\$1PLUGIN\$1PATH。

   ```
   echo $GST_PLUGIN_PATH
   ```

   如果您正确设置了输出，则会看到以下输出。如果输出为空，则说明环境变量设置不正确。

   ```
   /home/ubuntu/environment/amazon-kinesis-video-streams-producer-sdk-cpp/build
   ```

------

## 运行示例将媒体上传到 Kinesis Video Streams
<a name="send-data-run-samples"></a>

示例应用程序不支持 IMDS 凭证。在您的终端中，导出您的 IAM 用户或角色以及您的直播所在区域的 AWS 证书。

```
export AWS_ACCESS_KEY_ID=YourAccessKey
export AWS_SECRET_ACCESS_KEY=YourSecretKey
export AWS_DEFAULT_REGION=YourAWSRegion
```

如果您使用的是临时 AWS 证书，请同时导出您的会话令牌：

```
export AWS_SESSION_TOKEN=YourSessionToken
```

------
#### [ .mp4 files ]

下载一个.mp4 视频样本上传到 Kinesis Video Streams。

```
wget https://awsj-iot-handson.s3-ap-northeast-1.amazonaws.com/kvs-workshop/sample.mp4
```

视频规格：
+ **分辨率** ——1280 x 720 像素 
+ **帧速率**-每秒 30 帧
+ **持续时间**-14.0 秒
+ **视频编码**-H.264，在轨道 1 中
+ **关键帧**-每 3 秒，片段持续时间（也称为一组图片 (GoP) 大小）为 3 秒，最后一个片段长为 2 秒。

使用您之前创建的直播的名称运行以下命令。如果您尚未创建直播，请参阅[创建 Amazon Kinesis 视频流](gs-createstream.md)。

```
./kvs_gstreamer_sample YourStreamName ./sample.mp4
```

------
#### [ Sample video from GStreamer ]

使用以下命令使用生成视频 GStreamer。

告诉 GStreamer 在哪里可以找到`kvssink` GStreamer插件。在您的生成目录中，指定包含该`libgstkvssink.so`文件的文件夹的路径。

在您的构建目录中，运行以下命令：

```
export GST_PLUGIN_PATH=`pwd`
```

该 GStreamer 管道生成具有标准测试模式的实时测试视频流，该视频流以每秒 10 帧的速度运行，分辨率为 640x480 像素。添加了一个显示当前系统时间和日期的叠加层。然后将视频编码为 H.264 格式，并且最多每 10 帧生成一次关键帧，从而使片段持续时间（也称为一组图片 (GoP) 大小）为 1 秒。 `kvssink`获取 H.264 编码的视频流，将其打包为 Matroska (MKV) 容器格式，然后将其上传到你的 Kinesis 视频流中。

运行如下命令：

```
gst-launch-1.0 -v videotestsrc is-live=true \
  ! video/x-raw,framerate=10/1,width=640,height=480 \
  ! clockoverlay time-format="%a %B %d, %Y %I:%M:%S %p" \
  ! x264enc bframes=0 key-int-max=10 \
  ! h264parse \
  ! kvssink stream-name="YourStreamName"
```

要停止 GStreamer 管道，请选择终端窗口并**按 CTRL\$1C**。

------

**注意**  
有关使用该 GStreamer 插件流式传输来自摄像机的 RTSP 流或 USB 摄像头的视频的更多信息，请参阅[示例：Kinesis Video Streams 制作人 GStreamer SDK 插件-kvssink](examples-gstreamer-plugin.md)。

## 查看确认对象
<a name="gs-review-acks"></a>

在上传过程中，Kinesis Video Streams 会将确认对象发送回执行上传的客户端。您应该在命令输出中看到这些内容。一个例子如下所示：

```
{"EventType":"PERSISTED","FragmentTimecode":1711124585823,"FragmentNumber":"12345678901234567890123456789012345678901234567"}
```

如果确认`EventType`是`PERSISTED`，则表示 Kinesis Video Streams 已对这块媒体进行了持久存储和加密，以供检索、分析和长期存储。

有关致谢的更多信息，请参阅[PutMedia](API_dataplane_PutMedia.md)。