亚马逊AWS官方博客

快速落地智能云存储摄像机解决方案

介绍

加速IPC设备开发进度

为IPC出海客户提供快速开发产品的代码原型参考。

相信每个想要IPC出海的厂商,在设备接入亚马逊Kinesis Video Stream服务时都面临同样一个痛点:如何快速的开发一款安全,稳定,高效,低成本的亚马逊云连接IPC。KVS embedded producer C SDK就是为了这个目的而诞生的。

KVS embedded producer C SDK延续了亚马逊云一贯的高安全性。并且我们着重深度优化了软件的内存占用情况,使得仅拥有64MB甚至32MB的低成本IPC SoC一样可以正常运行。在与芯片厂商(如本文下面提到的君正T31)深度合作的背景下,这款SDK拥有了更好的稳定性和高效的性能表现。它提供了“自带电池”一般的使用体验,极易上手。

Kinesis Video Stream介绍

T31介绍

T31智能视频处理器拥有1.5G高主频CPU计算性能,星光增强ISP,5M@30帧视频编码,安全引擎 并且内置DDR 。
专业的成像能力,领先的编码品质,丰富的差异化扩展,极致的成本控制和低功耗基因,搭配整合好的丰
富AI功能算法,使T31成为业内最全面均衡的H.265+AI视频处理器。


T31 硬件开发板

使用方法

下载代码

git clone --recursive https://github.com/aws-samples/amazon-kinesis-video-streams-producer-embedded-c.git

如果在执行 git clone 命令的时候忘记带上 –recursive ,参数,可以进入代码目录中执行 git submodule update –init –recursive 。

预置设备证书(可选)

IP Camera设备也可以使用 X.509 证书连接到AWS IoT,然后从AWS IoT credentials provider 中获取授权信息,并用此信息来授权Kinesis Video Streams service的相关操作。请参考文档中 “how-iot” 的相关操作步骤。

准备H264视频文件

上面介绍的代码中,我们上传的视频是预先录制好,并以文件形式储存在本地的。可以在代码中 “samples/h264SampleFrames/” 目录下面找到,这些文件都是以”frame-[index].h264″作为开头。比如,”frame-001.h264″, “frame-002.h264”, 等等。
You can also use sample frames of amazon-kinesis-video-streams-producer-c.

Ingenic T31 example

准备工作

  • Ingenic T31 SDK ISVP-T31-1.1.3-20210223:
    • 注意:上面的代码中没有附带君正T31的SDK,所以需要自行联系君正或者该SDK
  • Ingenic T31 EVB 开发板
  • 以太网网络连接

Device 设置

请跟随君正T31的SDK中附带的”T31 SNIPE_user_guide.pdf”配置设备,加入如下配置到 /system/init/app_init.sh

设置 DNS server

使用如下命令设置DNS服务器。.其中 “8.8.8.8” 是谷歌的DNS服务器,可以根据实际情况修改。.

echo 'nameserver 8.8.8.8' > /etc/resolv.conf

然后,使用如下命令验证DNS服务器是否正确。

# ping thinkwithwp.com
PING thinkwithwp.com (13.35.25.75): 56 data bytes
64 bytes from 13.35.25.75: seq=0 ttl=242 time=10.026 ms
64 bytes from 13.35.25.75: seq=1 ttl=242 time=9.244 ms

设置 NTP time

注意:请确保你的NTP服务器工作正常,可以根据实际情况修改NTP服务器地址。

ntpd -nqp pool.ntp.org

然后,使用如下命令验证NTP服务器是否正确。

[root@Ingenic-uc1_1:mnt]# date
Fri Jul 16 03:30:05 UTC 2021

挂载 SD card

这里我们会把执行程序放在SD中,如果你使用其他地址存放执行程序,比如Flash,可以跳过这一步。
使用如下命令挂载SD卡。

mount -t vfat /dev/mmcblk0p1 /mnt

使能 音频驱动

使用如下命令加载音频模块,如果你不想使用音频,可以跳过这一步。

insmod /system/lib/modules/audio.ko

构建代码

下载代码

git clone --recursive https://github.com/aws-samples/amazon-kinesis-video-streams-producer-embedded-c.git

如果在执行 git clone 命令的时候忘记带上 –recursive ,参数,可以进入代码目录中执行 git submodule update --init --recursive 

配置 T31 SDK

将 T31 的 SDK 放到 “samples/kvsapp-ingenic-t31/sdk/”目录下

cp -rf /path/to/ISVP-T31-1.1.3-20210223/software/sdk/Ingenic-SDK-T31-1.1.3-20210223/sdk/4.7.2 \
    /path/to/amazon-kinesis-video-streams-producer-embedded-c/samples/kvsapp-ingenic-t31/sdk/

最终的目录结构如下:

.
├── app
├── libraries
├── misc
├── samples
│   ├── kvsapp-ingenic-t31
│   │   ├── include
│   │   ├── library
│   │   ├── sdk
│   │   │   ├── include
│   │   │   │   ├── imp
│   │   │   │   └── sysutils
│   │   │   ├── lib
│   │   │   │   ├── glibc
│   │   │   │   └── uclibc
│   │   │   └── samples
│   │   │       ├── libimp-samples
│   │   │       └── libsysutils-samples
│   │   └── source
│   └── mkv_uploader
└── src

配置 toolchain

添加”mips-gcc472-glibc216-64bit”交叉编译链到系统的PATH中

export PATH=$PATH:/path/to/your/toolchain/mips-gcc472-glibc216-64bit/bin

配置 sample 

如果你想使用环境变量,可以跳过这一步。
详细配置保存在 “samples/kvsapp-ingenic-t31/include/sample_config.h“文件中。

Build

创建build目录

mkdir build && cd build

执行cmake命令

cmake -DCMAKE_C_COMPILER=mips-linux-gnu-gcc \
    -DCMAKE_CXX_COMPILER=mips-linux-gnu-g++ \
    -DBOARD_INGENIC_T31=ON \
    ..

Build 整个项目

cmake --build .

在编译完成以后,在”build/bin/”目录下将会出现两个可执行文件: “kvsappcli-ingenic-t31” 和 “kvsappcli-ingenic-t31-static” 。 “kvsappcli-ingenic-t31″ 使用”build/lib/” 目录下的shared library。 “kvsappcli-ingenic-t31-static” 是一个静态可执行程序,它不需要其他的动态库,除了最基本的运行时 library,比如 “libc” 和 “pthread”。 将上述编译生成的文件以及相关的音视频文件拷贝到SD卡中。

运行 sample

如果你没有把配置写入文件 “samples/kvsapp-ingenic-t31/include/sample_config.h“,可以直接配置环境变量:

export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_DEFAULT_REGION=us-east-1
export AWS_KVS_HOST=kinesisvideo.us-east-1.amazonaws.com

现在可执行文件已经在SD卡上了,可以使用如下命令启动应用,其中 kvs-stream-name 是KVS 流的名字。也可以把这些参数细节写入sample_config.h 文件中。

cd /mnt
./kvsappcli-ingenic-t31-static [kvs-stream-name]

如果一切正常,可以看到如下输出:

[root@Ingenic-uc1_1:mnt]# ./kvsappcli-ingenic-t31
AACEncoderInit   channels = 1, pcm_frame_len = 2048
[ 5577.435278] gc2053 chip found @ 0x37 (i2c0) version H20210315a
---- FPGA board is ready ----
Board UID : 30AB6E51
Board HW ID : 72000460
Board rev.  : 5DE5A975
Board date  : 20190326
-----------------------------
!! The specified ScalingList is not allowed; it will be adjusted!!
[ 5577.814323] codec_set_device: set device: MIC...
Info: SPS is found
Info: SPS is set
Info: PPS is found
Info: PPS is set
Info: KVS stream buffer created
Info: Try to describe stream
Info: PUT MEDIA endpoint: s-xxxxxxxx.kinesisvideo.us-east-1.amazonaws.com
Info: 100-continue
Info: Flush to next cluster
Info: Fragment buffering, timecode:1628131208569
Info: Fragment received, timecode:1628131208569
Info: Fragment buffering, timecode:1628131212771
Info: Fragment persisted, timecode:1628131208569
Info: Fragment received, timecode:1628131212771
Info: Fragment buffering, timecode:1628131216972
Info: Fragment persisted, timecode:1628131212771
Info: Fragment received, timecode:1628131216972
Info: Fragment buffering, timecode:1628131220975
Info: Fragment persisted, timecode:1628131216972
Info: Fragment received, timecode:1628131220975
Info: Fragment buffering, timecode:1628131224975
Info: Fragment persisted, timecode:1628131220975

KVS sample for Ingenic T31

上面的build 步骤以后,””build/ingenic_t31_kvs_sample”目录中将会出现一些预编译好的 libraries。这样可以大大加速再次build 的速度。

目前支持的其他硬件平台

上面介绍的代码是为嵌入式设备特殊优化的,比如FreeRTOS/Embedded Linux。如下的几种常见的嵌入式平台,目前都可以使用这份代码安全的上传音视频流到 Kinesis Video Streams.

KVS认证

AWS 提供一系列硬體相關的認證程序,用來協助合作伙伴驗證其硬體設備正常運行在AWS相關服務。經由AWS認證通過的硬件設備將會被列表在AWS合作伙伴的設備目錄。此設備目錄將協助終端用戶快速搜索相關的硬件設備,加速搭建解決方案所選用之硬件,目的在於讓用戶專注在解決方案之開發,利用AWS IoT 生態圈來簡化硬件的選用,達成最佳的用戶體驗。 Amazon Kinesis Video Streams 為 AWS Device Qualification Program 其中一項硬體認證服務。

Amazon Kinesis Video Streams 認證程序基於有攝像頭的設備,或是俱備上傳影音功能之設備已整合相關軟件。確保設備正常運行KVS相關軟件,且能持續的將影音資料上傳至KVS服務。認證程序涵蓋了設備連線能力,與KVS服務之交互,設備身份驗證程序,以及合乎最佳安全實踐。客戶透過登入 AWS Partner Central 來取得相關認證文件。

合作伙伴所提交之設備,經過技術團隊驗證以及市場團隊審核其內容,完成認證流程後,硬件設備將會被公開發佈在AWS Partner Device Catalog 以及 AWS 硬件合作伙伴 之中。

本篇作者

William

AWS物联网实验室 解决方案架构师,主要负责物联网解决方案,致力于AWS IoT 相关技术的的推广与应用

Blake

AWS物联网实验室 技术项目经理,主要负责物联网实验室项目推动,致力于AWS IoT 相关技术的扩展与推动新服务

Jimmy

北京君正智能视频事业部软件工程师,致力于IPC产品解决方案的推广与应用

徐开

AWS物联网实验室 解决方案架构师,主要负责物联网解决方案,致力于AWS IoT 相关技术的的推广与应用