共计 3581 个字符,预计需要花费 9 分钟才能阅读完成。
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/am… 提供。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,咱们下期见