title: 亚马逊AWS Kinesis Video Streams with KVS demo示例
categories:[Linux C]
tags:[亚马逊云平台]
date: 2021/12/22
作者:hackett 微信公众号:加班猿Kinesis Video Streams 不仅用于存储视频数据。您还可以用它来实时监视视频流,因为这些流在云中接收。您既可以在 AWS 管理控制台中监控实时流,也可以开发自己的监控应用程序,以便使用 Kinesis Video Streams API 库显示实时视频。
1、对象模型
Kinesis Video Streams C 创建者库基于称为独立于平台的代码库 (PIC) 的通用组件,该组件在 GitHub 上的 https://github.com/awslabs/amazon-kinesis-video-streams-pic/ 提供。PIC 包含面向低级别的独立于平台的业务逻辑。Kinesis Video Streams C 创建者库通过额外的一层 API 打包 PIC,允许特定于场景和特定于平台的回调和事件。Kinesis Video Streams C 创建器库在 PIC 之上内置了组件:
-
设备信息提供程序 – 公开
DeviceInfo
结构,该结构可直接提供给 PIC API。有一组易于配置的提供程序,包括应用程序场景优化的提供程序,可以根据您应用程序处理的流的数量和类型来优化内容存储,并根据可用 RAM 的数量优化配置的所需缓存数量。 -
流信息提供程序 – 公开
StreamInfo
结构,该结构可直接提供给 PIC API。有一组易于配置提供程序,特定于应用程序类型以及常见类型的流式处理场景。这包括诸如视频、音频、音频/视频多轨道等提供程序。每个这些场景都有默认值,您可以根据应用程序需求进行定义。 -
回调提供程序 – 公开
ClientCallbacks
结构,该结构可直接提供给 PIC API。这包括一组易于配置的回调提供程序,面向网络(基于 CURL 的 API 回调)、授权(AWS 凭证 API)、在错误回调上重试流式处理等。回调提供程序 API 获取一系列参数进行配置,例如 AWS 区域和授权信息(通过 IoT 证书或通过 AWS AccessKeyId、SecretKey、SessionToken)。如果您的应用程序需要进一步处理特定回调以实现某些应用程序特定的逻辑,则可以通过自定义回调来增强回调提供程序。 - FrameOrderCoordinator – 帮助处理多轨道场景的音频和视频同步。它具有默认行为,您可以自定义以处理应用程序特定的逻辑。它还首先在 PIC 帧结构中简化帧元数据打包,然后提交到较低层的 PIC API。对于非多轨道场景,此组件直接传递到 PIC putFrame API。
C 库提供以下对象来管理向 Kinesis 视频流发送数据的过程:
- KinesisVideoClient – 包含有关设备的信息,并维护回调以报告 Kinesis Video Streams 事件。
- KinesisVideoStream – 表示包含有关视频流的参数的信息,例如,名称、数据保留期、媒体内容类型,等等。
2、环境准备
-
为 macOS 安装以下构建依赖项:
- Autoconf 2.69 (许可证 GPLv3+/Autoconf:GNU GPL 版本 3 或更高版本)
- CMake 3.7 或 3.8
- Pkg-Config
- Flex 2.5.35 Apple (flex-31) 或更高版本
- Bison 2.4 (GNU 许可证)
- Automake 1.15.1 (GNU 许可证)
- GNU Libtool (Apple Inc. 版本 cctools-898)
- xCode (macOS) / clang / gcc (xcode-选择版本 2347)
- Java 开发工具包 (JDK) (用于 Java JNI 编译)
- Lib-Pkg
-
为 Ubuntu 安装以下构建依赖项:
-
安装 Git:
sudo apt-get install git
$ git --version git version 2.14.1
-
安装 CMake:
sudo apt-get install cmake
$ cmake --version cmake version 3.9.1
-
安装 Libtool:
sudo apt-get install libtool
2.4.6-2
-
安装 libtool-bin:
sudo apt-get install libtool-bin
$ libtool --version libtool (GNU libtool) 2.4.6 Written by Gordon Matzigkeit, 1996
-
安装 GNU Automake:
sudo apt-get install automake
$ automake --version automake (GNU automake) 1.15
-
安装 GNU Bison:
sudo apt-get install bison
$ bison -V bison (GNU Bison) 3.0.4
-
安装 G++:
sudo apt-get install g++
g++ --version g++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0
-
安装 curl:
sudo apt-get install curl
$ curl --version curl 7.55.1 (x86_64-pc-linux-gnu) libcurl/7.55.1 OpenSSL/1.0.2g zlib/1.2.11 libidn2/2.0.2 libpsl/0.18.0 (+libidn2/2.0.2) librtmp/2.3
-
安装 pkg-config:
sudo apt-get install pkg-config
$ pkg-config --version 0.29.1
-
安装 Flex:
sudo apt-get install flex
$ flex --version flex 2.6.1
-
安装 OpenJDK:
sudo apt-get install openjdk-8-jdk
$ java -version openjdk version "1.8.0_171"
-
设置
JAVA_HOME
环境变量:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
-
运行构建脚本:
./install-script
-
3、下载编译KVS
下载:
创建一个目录,然后从 GitHub 存储库克隆示例源代码。
git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-producer-c.git
编译:
在下载好的源码中创建一个build
目录,并在build
中执行cmake
mkdir -p amazon-kinesis-video-streams-producer-c/build
cd amazon-kinesis-video-streams-producer-c/build
cmake .. // 这里cmake的时候有可能会失败,被墙了,最好自备*
您可以将以下选项传递给 cmake ..
-
-DBUILD_DEPENDENCIES
- 是否从源代码构建依赖库 -
-DBUILD_TEST=TRUE
- 构建单元/集成测试,可能有助于确认对您的设备的支持。./tst/webrtc_client_test
-
-DCODE_COVERAGE
- 启用覆盖范围报告 -
-DCOMPILER_WARNINGS
- 启用所有编译器警告 -
-DADDRESS_SANITIZER
- 使用 AddressSanitizer 构建 -
-DMEMORY_SANITIZER
- 使用 MemorySanitizer 构建 -
-DTHREAD_SANITIZER
- 使用 ThreadSanitizer 构建 -
-DUNDEFINED_BEHAVIOR_SANITIZER
- 使用 UndefinedBehaviorSanitizer 构建 -
-DALIGNED_MEMORY_MODEL
-为仅对齐内存模型的设备构建。默认为OFF
。
完成后再回到build
中执行make
构建WebRTC C 开发工具包及其提供的示例
make
示例应用程序 kinesis_video_cproducer_video_only_sample
将文件夹 samples/h264SampleFrames
中的 h.264 编码视频帧发送到 Kinesis Video Streams。以下命令以循环方式发送 10 秒钟的视频帧到 Kinesis Video Streams:
./kinesis_video_cproducer_video_only_sample YourStreamName 10
如果指定要从其他文件夹(例如,MyH264FramesFolder
)发送 H.264 编码帧,您可以使用以下参数运行命令:
./kinesis_video_cproducer_video_only_sample YourStreamName 10 MyH264FramesFolder
如果你觉得文章还不错,可以给个"三连",文章同步到个人微信公众号[加班猿]
我是hackett,我们下期见