Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向 Amazon Kinesis 视频流发送数据
本节介绍如何将媒体数据从摄像机发送到您在上一节中创建的 Kinesis 视频流。本节使用使用 C++ 制作者库作为示例:Kinesis 视频流制作人 SDK GStreamer 插件-kvssink插件。
为了在各种操作系统上从各种设备发送媒体,本教程使用了 Kinesis Video Streams C++ 制作人库和 GStreamer,这是一种标准化摄像机和其他媒体源访问的开源媒体框架。
编译 SDK 和示例
您可以在计算机上或中构建 SDK 和示例 Amazon Cloud9。请按照以下相应步骤操作。
- Build on your computer
-
使用自述文件中的说明来构建生产者库和示例应用程序。
这包括:
-
安装依赖项
-
克隆存储库
-
使用 CMake 生成 mak efil e
-
使用 m ake 构建二进制文件
- Build in Amazon Cloud9
-
按照以下步骤上传到 Kinesis Video Streams 中。 Amazon Cloud9您无需将任何内容下载到计算机上。
-
在 Amazon Web Services 管理控制台,打开Amazon Cloud9。
选择 “创建环境” 。
-
在 “创建环境” 屏幕上,完成以下操作:
您可以将其他字段保留为默认选项。
-
创建环境后,在 Cloud9 IDE 列中选择打开。
在屏幕的中下角区域,你可以看到Admin:~/environment $。这是 Amazon Cloud9
(亚马逊 EC2)终端。
如果您不小心关闭了终端,请选择 “窗口,新建终端” 。
在终端中运行以下命令将音量更改为 20 GiB。
-
下载 脚本。
wget https://awsj-iot-handson.s3-ap-northeast-1.amazonaws.com/kvs-workshop/resize_volume.sh
-
授予脚本执行权限。
chmod +x resize_volume.sh
-
运行 脚本。
./resize_volume.sh
-
获取有关您可以通过高级打包工具 (APT) 安装或更新的所有软件的最新信息。
此命令不会更新软件本身,但可确保您的系统知道最新的可用版本是什么。
sudo apt-get update
-
安装 C++ 生产者 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
-
使用 git 克隆 C++ 生产者 SDK。
git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
-
准备一个编译目录。
cd amazon-kinesis-video-streams-producer-sdk-cpp
mkdir build
cd build
-
使用 CMake 生成 makefile。
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
-
使用 make 编译 SDK 和示例应用程序,并生成最终的可执行文件。
make
预期输出的结尾如下所示:
[100%] Linking CXX executable kvs_gstreamer_file_uploader_sample
[100%] Built target kvs_gstreamer_file_uploader_sample
-
确认示例文件已生成。列出当前目录中的文件:
ls
确认以下文件存在:
-
kvs_gstreamer_sample
-
libgstkvssink.so
-
(可选)您可以将设置 GST_PLUGIN_PATH 环境变量添加到外壳程序的启动脚本中。这样可以确保在新的终端会话期间正确设置 GST_PLUGIN_PATH。在中 Amazon Cloud9,shell 的启动脚本是:~/.bashrc。
运行以下命令将该命令附加到 shell 启动脚本的末尾。
echo "export GST_PLUGIN_PATH=~/environment/amazon-kinesis-video-streams-producer-sdk-cpp/build" >> ~/.bashrc
键入以下命令运行 shell 的启动脚本:
source ~/.bashrc
确认已设置 GST_PLUGIN_PATH。
echo $GST_PLUGIN_PATH
如果您正确设置了输出,您将看到以下输出。如果输出为空,则环境变量设置不正确。
/home/ubuntu/environment/amazon-kinesis-video-streams-producer-sdk-cpp/build
运行示例将媒体上传到 Kinesis Video Streams
示例应用程序不支持 IMDS 证书。在您的终端中,导出您的 IAM 用户或角色以及您的直播所在区域的 Amazon 证书。
export AWS_ACCESS_KEY_ID=YourAccessKey
export AWS_SECRET_ACCESS_KEY=YourSecretKey
export AWS_DEFAULT_REGION=YourAWSRegion
如果你使用的是临时 Amazon 证书,还要导出你的会话令牌:
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
视频规格:
使用您之前创建的流的名称运行以下命令。如果您尚未创建直播,请参阅创建亚马逊 Kinesis 视频流。
./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-encoded 视频流,将其打包成 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+C。
查看确认对象
在上传期间,Kinesis Video Streams 会将确认对象发送回执行上传的客户端。你应该在命令输出中看到这些内容。一个例子如下所示:
{"EventType":"PERSISTED","FragmentTimecode":1711124585823,"FragmentNumber":"12345678901234567890123456789012345678901234567"}
如果确认信息EventType是PERSISTED,则表示Kinesis Video Streams已持久存储和加密了这部分媒体,用于检索、分析和长期存储。
有关确认的更多信息,请参阅。 PutMedia