

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

# 示例：Kinesis 视频流制作人 SDK GStreamer 插件-kvssink
<a name="examples-gstreamer-plugin"></a>

本主题介绍如何构建 Amazon Kinesis Video Streams 制作器 SDK 以用作 GStreamer 插件。

**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 视频流，以便进行实时或以后的播放、存储和进一步分析。

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

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

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

![用于对从摄像机发送至 服务的视频进行流式处理的 GStreamer 媒体管道的功能视图。](https://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 视频流的名称。

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

有关 GStreamer 插件和参数的最新信息，请参阅 [ GStreamer 插件。](https://gstreamer.freedesktop.org/documentation/plugins_doc.html?gi-language=c)您也可以使用`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 管道，将摄像机已经以 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 ! 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 中直播音频和视频。 Raspberry-PI ](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)

### 示例 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\+\+ 制作器软件开发工具包（和 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)。