亚马逊AWS官方博客

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

介绍

加速IPC设备开发进度

为IPC(IP摄像机)出海客户提供快速开发产品的代码原型参考。

相信每个想要IPC出海的厂商,在研发接入亚马逊云科技Kinesis Video Stream服务时都面临同样一个痛点:如何快速的开发一款安全,稳定,高效,低成本的亚马逊云连接IPC。

在上一篇快速落地智能云存储摄像机解决方案中,我们介绍了KVS embedded producer C SDK,它提供了“自带电池”一般的使用体验,极易上手。在本文(提高篇)中,将介绍amazon-kinesis-video-streams-media-interface

它延续了亚马逊云一贯的高安全性和上篇中重深度优化的内存使用情况,使得仅拥有64MB甚至32MB的低成本IPC SoC一样可以正常运行。更加重要的是,它利用软件分层的设计将灵活性与强大的功能,更加完美的集合在一起,使得一套软件就可以支持云存储和WebRTC两个功能。我们一直持续投入研发资源,未来会推出更多的SoC支持以及多种软件功能的集成,相信会满足客户日益增长的软件能力需求。

KVS/WebRTC介绍

在上一篇快速落地智能云存储摄像机解决方案中,我们主要介绍的是amazon KVS的云存储功能,本文中将引出KVS服务支持的另外一个令人兴奋的功能WebRTC。

WebRTC介绍

WebRTC 是一个开放的技术规范,它通过简单的 API 支持跨浏览器和移动应用程序的实时通信 (RTC)。它使用对等技术在互联对等设备间实时交换数据,并提供人与人交互所需的低延迟媒体流。WebRTC 规范包括一组 IETF 协议,除了用于可靠和安全的实时媒体和数据流式传输的协议规范之外,还包括用于建立对等连接的交互式连接建立使用中继绕过 NAT 的遍历 (TURN) 和 NAT 的会话遍历实用工具 (STUN)

Amazon Kinesis Video Streams/WebRTC 为用户提供符合WebRTC 标准的完全托管服务。用户无需构建、运营或扩展任何与 WebRTC 相关的云基础设施(例如信令或媒体中继服务器)就能安全地进行媒体的实时流式传输或在任何摄像头 IoT 设备与符合 WebRTC 的移动或 Web 播放器之间实现双向音频或视频交互。

SoC介绍

在上一篇快速落地智能云存储摄像机解决方案中,我们使用君正T31作为演示平台。本文使用上海富瀚微电子FH8626V100进行演示。

富瀚微FH8626V100是面向200万像素消费类网络摄像机应用的 SOC 芯片,集成了高性能图像处理模块和 H.264/JPEG 编码模块,支持多码流编码。同时内部集成了 512Mb DDR2 存储器,拥有完备的应用所需外设接口,包括 USB、SDIO 和 Ethernet 等,为用户提供高性价比的视频应用解决方案。

FH8626V100硬件开发板

SDK介绍

Amazon Kinesis Video Streams Media Interface是亚马逊云科技物联网实验室为嵌入式设备音视频交互设计的一套接口。SDK通过提供硬件平台无关的抽象层,帮助用户降低开发成本、缩短开发周期。SDK同时提供开箱即用的KVS WebRTC和KVS producer云存储示例程序,为用户提供参考实现。

使用方法

准备工作

预置设备证书

对于量产的嵌入式物联网设备而言,身份验证和鉴权的最佳实践是使用设备证书。亚马逊云科技IoT Core为IoT设备提供基于X.509证书的身份验证和权限控制,下文中将使用X.509证书接入IoT Core和KVS WebRTC。 关于X.509证书的生成和权限配置,可以参考SDK提供的证书生成脚本

配置摄像头系统时间

Amazon Kinesis Video Streams 要求系统有正确的时间配置。用户可以通过ntp完成时间与NTP服务器的校准与同步,也可以先简单手动设置下板端时间

export TZ=CST-8
date –s “2022-06-08 10:48:00”
hwclock -w

加载相关驱动

./load_modules_FH8626V100.sh

编译KVS WebRTC示例程序

下载代码

git clone https://github.com/aws-samples/amazon-kinesis-video-streams-media-interface.git

配置FH8626V100针对KVS的SDK增强包

FH8626V100_IPC_V2.0.0_20200909_KVS.Ext.rar增强包,请自行联系富瀚微获取
cp -r /path/to/FH8626V100_IPC_V2.0.0_20200909_KVS.Ext/3rdparty/FH8626V100/* \
    /path/to/amazon-kinesis-video-streams-media-interface/3rdparty/FH8626V100/

配置交叉编译工具链

export CC=/opt/fullhan/toolchain/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-gcc
export CXX=/opt/fullhan/toolchain/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-g++

编译

使用如下指令来编译KVS WebRTC示例程序:

cd amazon-kinesis-video-streams-media-interface
mkdir build; cd build; cmake .. -DBOARD=FH8626V100 -DBUILD_KVS_SAMPLES=ON -DBUILD_WEBRTC_SAMPLES=ON

编译完成后,amazon-kinesis-video-streams-media-interface/build/samples/webrtc/ 目录下将生成可执行文件kvswebrtcmaster-static

同时生成云存储示例程序 kvsproducer-static,可用于演示云存储功能

部署及测试

准备SD卡并挂载

将上文中生成的X.509证书及可执行文件kvswebrtcmaster-static复制到SD卡中并将SD卡挂载到摄像头:

mount -t vfat /dev/mmcblk0p1 /mnt

配置环境变量

在摄像头终端中执行如下指令:

export AWS_KVS_LOG_LEVEL=2
export AWS_DEFAULT_REGION=us-east-1
export AWS_KVS_CACERT_PATH=cacert.pem
export AWS_IOT_CORE_THING_NAME=your_camera_name
export AWS_IOT_CORE_CREDENTIAL_ENDPOINT=xxxxxxxxxxxxxx.credentials.iot.us-east-1.amazonaws.com
export AWS_IOT_CORE_CERT=your_camera_certificate.pem
export AWS_IOT_CORE_PRIVATE_KEY=your_camera_private.key
export AWS_IOT_CORE_ROLE_ALIAS=your_camera_role_alias

运行示例程序

在摄像头终端中执行示例程序:

./kvswebrtcmaster-static your_camera_name

如果连接正常,用户可在终端中看到如下日志

[KVS Master] Signaling client connection to socket established
[KVS Master] Channel your_camera_name set up done

测试示例程序

用户可以通过网页浏览器访问KVS控制台KVS WebRTC测试页面与摄像头建立连接,查看实时视频/音频流。

KVS/云存储功能演示

配置环境变量

在摄像头终端执行如下指令:

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

运行示例程序

在摄像头终端同步时间,加载驱动并执行示例程序:

export TZ=CST-8
date –s “2022-06-08 10:48:00”
hwclock -w
./load_modules_FH8626V100.sh
./ kvsproducer-static

测试示例程序

用户可通过网页浏览器访问KVS控制台查看云视频流或KVS WebRTC测试页面与摄像头建立连接,查看实时视频/音频流。

本篇作者

李智勤

亚马逊云科技物联网实验室 物联网原型架构师,主要负责物联网相关系统设计与开发

蔡俊杰

上海富瀚微电子深圳分公司IPC应用开发工程师,致力于IPC产品解决方案的推广与应用

徐开

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