

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

# 示例：Kinesis Video Streams 制作人 GStreamer SDK 插件-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 GStreamer Streams 插件简化了 GStreamer 现有媒体管道与 Kinesis Video Streams 的集成。集成后 GStreamer，您可以将来自网络摄像头或实时流媒体协议 (RTSP) 摄像机的视频流式传输到 Kinesis Video Streams，以便进行实时或以后的播放、存储和进一步分析。

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

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

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

![用于将视频从摄像机流式传输到服务的 GStreamer 媒体管道的功能视图。](http://docs.amazonaws.cn/kinesisvideostreams/latest/dg/images/gstreamer-pipeline.png)


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

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

你可以在 macOS、Ubuntu、Raspberry Pi 或 Windows 上将制作 GStreamer 器 SDK 接收器构建为动态库。该 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.amazonaws.cn//kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html#credentials-to-kvssink)和[提供区域外，该](https://docs.amazonaws.cn//kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html#kvssink-region)`kvssink`元素还具有以下必需参数：
+ `stream-name`— 目的地 Kinesis Video Streams 的名称。

有关 `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>

[以下命令使用 rtspsr GStreamer c 插件在 Ubuntu 上创建一个管道，该管道从网络 RTSP 摄像机进行直播：](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html?gi-language=c) 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 管道，该管道以 H.264 格式对来自 USB 摄像机的直播进行编码，然后将其流式传输到 Kinesis Video Streams。此示例使用 [v4l2src 插件](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) 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。此示例使用 [v4l2src 插件](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) 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。此示例使用 rt [spsrc 插件](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。此示例使用 rt [spsrc 插件](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 上创建了一个将视频流式传输到 Kinesis Video Streams 的 GStreamer 管道。此示例使用 [v4l2src 插件](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) 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>

了解在 Raspberry-PI 和 Ubuntu 中如何[运行 gst-launch-1.0 命令开始对音频和视频进行流式处理](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 后，你可以使用下面`docker pull`提供的命令之一从亚马逊弹性容器注册表下载 Kinesis Video Streams C\+\+ Producer SDK（ GStreamer 和插件）。

要将 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.amazonaws.cn/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 Amazon --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)。