

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

# 示例：Kinesis Video Streams 制作人 SDK gStreamer 插件-kvssink
<a name="examples-gstreamer-plugin"></a>

本主题介绍如何构建用作 GStreamer 插件的 Amazon Kinesis Video Streams 制作人软件开发工具包。

**Topics**
+ [下载、构建和配置 gStreamer 元素](#examples-gstreamer-plugin-download)
+ [运行 gStreamer 元素](#examples-gstreamer-plugin-run)
+ [GStreamer 启动命令示例](#examples-gstreamer-plugin-launch)
+ [在 Docker 容器中运行 gStreamer 元素](#examples-gstreamer-plugin-docker)
+ [gStreamer 元素参数参考](examples-gstreamer-plugin-parameters.md)

[GStreamer](https://gstreamer.freedesktop.org/) 是一种流行的媒体框架，可供多个摄像机和视频源使用，通过组合模块化插件来创建自定义媒体管道。Kinesis Video Streams gStreamer 插件简化了你现有 gStreamer 媒体管道与 Kinesis Video Streams 的集成。集成 gStreamer 后，您可以将来自网络摄像头或实时流媒体协议 (RTSP) 摄像机的视频流式传输到 Kinesis Video Streams，以便进行实时或以后的播放、存储和进一步分析。

gStreamer 插件将 Kinesis Video Streams 制作人 SDK 提供的功能封装在 gStreamer sink 元素中，从而自动管理将视频流传输到 Kinesis Video Streams 的过程。`kvssink`GStreamer 框架提供标准的托管环境，用于构建源自摄像机或其他视频源的媒体流，以供进一步处理、渲染或存储。

GStreamer 管道通常由源（视频摄像头）与接收器元素（用于呈现视频的播放器或用于脱机检索的存储）之间的链接组成。在本示例中，您使用创建者开发工具包元素作为视频源（网络摄像机或 IP 摄像机）的*接收器*或媒体目标。然后，封装 SDK 的插件元素将视频流发送到 Kinesis Video Streams。

本主题介绍如何构建 GStreamer 媒体管道，该管道能够将来自视频源（例如网络摄像机或 RTSP 流）的视频流式传输到 Kinesis Video Streams，通常通过中间编码阶段（使用 H.264 编码）连接到 Kinesis Video Streams。当您的视频流作为 Kinesis 视频流可用时，您可以使用[使用解析器库观看摄像机的输出](parser-library.md)对视频流进行进一步处理、播放、存储或分析。

![用于对从摄像机发送至 服务的视频进行流式处理的 GStreamer 媒体管道的功能视图。](http://docs.aws.amazon.com/zh_cn/kinesisvideostreams/latest/dg/images/gstreamer-pipeline.png)


## 下载、构建和配置 gStreamer 元素
<a name="examples-gstreamer-plugin-download"></a>

GStreamer 插件示例包含在 Kinesis Video Streams C\+\+ 制作人 SDK 中。有关该开发工具包的先决条件和下载信息，请参阅[下载并配置 C\+\+ 制作器库代码](producersdk-cpp-download.md)。

你可以在 macOS、Ubuntu、Raspberry Pi 或 Windows 上将制作人 SDK gStreamer sink 作为动态库构建。GStreamer 插件位于您的 `build` 目录中。要加载此插件，它必须位于您的插件中`GST_PLUGIN_PATH`。运行以下命令：

```
export GST_PLUGIN_PATH=`pwd`/build
```

**注意**  
在 macOS 上，在 Docker 容器中运行 GStreamer 时，只能对来自网络摄像机的视频进行流式处理。在 macOS 上的 Docker 容器中，不支持对来自 USB 摄像机的视频进行流式处理。

## 运行 gStreamer 元素
<a name="examples-gstreamer-plugin-run"></a>

要使用 Kinesis Video Streams 制作人 SDK 元素作为接收器运行 gStreamer，请使用命令。`gst-launch-1.0`使用适合 GStreamer 插件使用的上游元素。例如，对于 Linux 系统上的 v4l2 设备使用 [v4l2src](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page)，或对于 RTSP 设备使用 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html#rtspsrc-page)。指定 `kvssink` 作为向创建者开发工具包发送视频的接收器（管道的最终目标）。

除了[提供凭证](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html#credentials-to-kvssink)和[提供区域外，该](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html#kvssink-region)`kvssink`元素还具有以下必需参数：
+ `stream-name`— 目的地 Kinesis Video Streams 的名称。

有关 `kvssink` 可选参数的信息，请参阅[gStreamer 元素参数参考](examples-gstreamer-plugin-parameters.md)。

有关 gStreamer 插件和参数的最新信息，请参阅 [g](https://gstreamer.freedesktop.org/documentation/plugins_doc.html?gi-language=c) Streamer 插件。您也可以使用`gst-inspect-1.0`后面加上 gStreamer 元素或插件的名称来打印其信息并验证其是否在您的设备上可用：

```
gst-inspect-1.0 kvssink
```

如果构建`kvssink`失败或 GST\_PLUGIN\_PATH 设置不正确，则输出将如下所示：

```
No such element or plugin 'kvssink'
```

## GStreamer 启动命令示例
<a name="examples-gstreamer-plugin-launch"></a>

以下示例演示如何使用 `kvssink` gStreamer 插件从不同类型的设备流式传输视频。

### 示例 1：在 Ubuntu 上直播来自 RTSP 摄像头的视频
<a name="examples-gstreamer-plugin-launch-ex1"></a>

以下命令将使用 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html?gi-language=c) GStreamer 插件在 Ubuntu 上创建一个流自网络 RTSP 摄像机的 GStreamer 管道：

```
gst-launch-1.0 -v rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! h264parse ! kvssink stream-name="YourStreamName" storage-size=128
```

### 示例 2：在 Ubuntu 上对来自 USB 摄像头的视频进行编码和流式传输
<a name="examples-gstreamer-plugin-launch-ex2"></a>

以下命令在 Ubuntu 上创建一个 GStreamer 管道，该管道将来自 USB 摄像头的直播按 H.264 格式进行编码，然后将其流式传输到 Kinesis Video Streams。此示例使用 [v4l2](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) src gStreamer 插件。

```
gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! x264enc  bframes=0 key-int-max=45 bitrate=500 ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name="YourStreamName" storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 示例 3：在 Ubuntu 上流式传输来自 USB 摄像头的预编码视频
<a name="examples-gstreamer-plugin-launch-ex3"></a>

以下命令在 Ubuntu 上创建一个 GStreamer 管道，该管道将摄像机已经以格式编码的视频流式传输到 Kinesis Video Stream H.264 s。此示例使用 [v4l2](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) src gStreamer 插件。

```
gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name="plugin" storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 示例 4：在 macOS 上流式传输来自网络摄像机的视频
<a name="examples-gstreamer-plugin-launch-ex4"></a>

以下命令在 macOS 上创建一个 gStreamer 管道，该管道通过网络摄像机将视频流式传输到 Kinesis Video Streams。此示例使用 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html#rtspsrc-page) GStreamer 插件。

```
gst-launch-1.0 rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! h264parse ! video/x-h264, format=avc,alignment=au ! kvssink stream-name="YourStreamName" storage-size=512  access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 示例 5：在 Windows 上流式传输来自网络摄像机的视频
<a name="examples-gstreamer-plugin-launch-ex5"></a>

以下命令在 Windows 上创建一个 gStreamer 管道，用于将视频从网络摄像机流式传输到 Kinesis Video Streams。此示例使用 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html#rtspsrc-page) GStreamer 插件。

```
gst-launch-1.0 rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! kvssink stream-name="YourStreamName" storage-size=512  access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 示例 6：在 Raspberry Pi 上直播来自摄像头的视频
<a name="examples-gstreamer-plugin-launch-ex6"></a>

以下命令在 Raspberry Pi 上创建一个 gStreamer 管道，用于将视频流式传输到 Kinesis Video Streams。此示例使用 [v4l2](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) src gStreamer 插件。

```
gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! omxh264enc control-rate=1 target-bitrate=5120000 periodicity-idr=45 inline-header=FALSE ! h264parse ! video/x-h264,stream-format=avc,alignment=au,width=640,height=480,framerate=30/1,profile=baseline ! kvssink stream-name="YourStreamName" access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 示例 7：在 Raspberry Pi 和 Ubuntu 中同时直播音频和视频
<a name="examples-gstreamer-plugin-launch-ex7"></a>

了解如何[运行 gst-launch-1.0 命令开始在 Ubuntu 和 Ubuntu 中同时直播音频和视频](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/linux.md#running-the-gst-launch-10-command-to-start-streaming-both-audio-and-video-in-raspberry-pi-and-ubuntu)。 Raspberry-PI 

### 示例 8：在 macOS 中流式传输来自设备源的音频和视频
<a name="examples-gstreamer-plugin-launch-ex8"></a>

了解在 MacOS 中如何[运行 gst-launch-1.0 命令开始对音频和视频进行流式处理](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/macos.md#running-the-gst-launch-10-command-to-start-streaming-both-audio-and-raw-video-in-mac-os)。

### 示例 9：上传同时包含音频和视频的 MKV 文件
<a name="examples-gstreamer-plugin-launch-ex9"></a>

了解如何[运行 gst-launch-1.0 命令来上传包含音频和视频的 MKV 文件](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/windows.md#running-the-gst-launch-10-command-to-upload-mkv-file-that-contains-both-audio-and-video)。你需要一个包含 h.264 和 AAC 编码媒体的 MKV 测试文件。

## 在 Docker 容器中运行 gStreamer 元素
<a name="examples-gstreamer-plugin-docker"></a>

Docker 是一个使用容器来开发、部署和运行应用程序的平台。使用 Docker 创建 GStreamer 管道可以标准化 Kinesis Video Streams 的操作环境，从而简化了应用程序的构建和使用。

要安装和配置 Docker，请参阅以下内容：
+ [Docker 下载说明](https://docs.docker.com/engine/install/)
+ [开始使用 Docker](https://docs.docker.com/guides/getting-started/)

安装 Docker 后，你可以使用下面提供的命令之一从亚马逊弹性容器注册表下载 Kinesis Video Streams C\+\+ Producer SDK（和 gStreamer 插件）。`docker pull`

要将 Kinesis Video Streams 制作器 SDK 元素作为 Docker 容器中的接收器运行 gStreamer，请执行以下操作：

**Topics**
+ [对你的 Docker 客户端进行身份验证](#examples-gstreamer-plugin-docker-authenticate)
+ [下载用于 Ubuntu、macOS、Windows 或 Raspberry Pi 的 Docker 映像](#examples-gstreamer-plugin-docker-download)
+ [运行 Docker 镜像](#examples-gstreamer-plugin-docker-run)

### 对你的 Docker 客户端进行身份验证
<a name="examples-gstreamer-plugin-docker-authenticate"></a>

将您的 Docker 客户端验证到要从中提取镜像的 Amazon ECR 注册表。您必须为使用的每个注册表获取身份验证令牌。代币的有效期为 12 小时。有关更多信息，请参阅 *Amazon Elastic Container Registry 用户指南*中的[注册表身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)。

**Example 向 Amazon ECR 进行身份验证**  
要使用 Amazon ECR 进行身份验证，请复制并粘贴以下命令，如图所示。  

```
sudo aws ecr get-login-password --region us-west-2 | docker login -u AWS --password-stdin https://546150905175.dkr.ecr.us-west-2.amazonaws.com
```
如果成功，输出将打印 `Login Succeeded`。

### 下载用于 Ubuntu、macOS、Windows 或 Raspberry Pi 的 Docker 映像
<a name="examples-gstreamer-plugin-docker-download"></a>

根据您的操作系统，使用以下命令之一将 Docker 映像下载到您的 Docker 环境：

#### 下载用于 Ubuntu 的 Docker 映像
<a name="examples-gstreamer-plugin-docker-download-ubuntu"></a>

```
sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest
```

#### 下载用于 macOS 的 Docker 映像
<a name="examples-gstreamer-plugin-docker-download-macos"></a>

```
docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest
```

#### 下载用于 Windows 的 Docker 映像
<a name="examples-gstreamer-plugin-docker-download-windows"></a>

```
docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-windows:latest
```

#### 下载用于 Raspberry Pi 的 Docker 映像
<a name="examples-gstreamer-plugin-docker-download-rpi"></a>

```
sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi:latest
```

要验证是否已成功添加镜像，请使用以下命令：

```
docker images
```

### 运行 Docker 镜像
<a name="examples-gstreamer-plugin-docker-run"></a>

根据您的操作系统，使用以下命令之一运行 Docker 映像：

#### 在 Ubuntu 上运行 Docker 镜像
<a name="examples-gstreamer-plugin-docker-run-ubuntu"></a>

```
sudo docker run -it --network="host" --device=/dev/video0 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux /bin/bash
```

#### 在 macOS 上运行 Docker 镜像
<a name="examples-gstreamer-plugin-docker-run-macos"></a>

```
sudo docker run -it --network="host" 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux /bin/bash
```

#### 在 Windows 上运行 Docker 镜像
<a name="examples-gstreamer-plugin-docker-run-windows"></a>

```
docker run -it 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-windows {{AWS_ACCESS_KEY_ID}} {{AWS_SECRET_ACCESS_KEY}} {{RTSP_URL}} {{STREAM_NAME}}
```

#### 在树莓派上运行 Docker 镜像
<a name="examples-gstreamer-plugin-docker-run-rpi"></a>

```
sudo docker run -it --device=/dev/video0 --device=/dev/vchiq -v /opt/vc:/opt/vc 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi /bin/bash
```

Docker 启动容器并显示命令提示符，供您在容器中使用命令。

在该容器中，使用以下命令设置环境变量：

```
export LD_LIBRARY_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$LD_LIBRARY_PATH
export PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/bin:$PATH
export GST_PLUGIN_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$GST_PLUGIN_PATH
```

开始`kvssink`使用流式传输`gst-launch-1.0`以运行适合您的设备和视频源的管道。有关管道的示例，请参见[GStreamer 启动命令示例](#examples-gstreamer-plugin-launch)。