亚马逊云 Amazon 的音视频服务 KVS 初体验

re:Invent
Amazon Kinesis Video Streams
0
0
# 前言 近两年,由于疫情等的因素影响,音视频技术相当火热。很多云厂商都推出了自己音视频相关的很多服务,亚马逊云也不例外,除了 Chime 以外,还有一款产品 Kinesis Video Streams(KVS)。据亚马逊云科技 AIoT 产品专家表示,[Amazon Kinesis Video Streams](https://aws.amazon.com/cn/kinesis/video-streams/?trk=cndc-detail)(KVS)是 Amazon IoT 产品家族中的王牌产品之一,其主要功能之一,是获取、封装和存储视频流用于播放、分析和[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail);其二,则是1秒以内的超低延时实时音视频服务。 # 正文 本文将通过一个案例来介绍一下亚马逊云的 Kinesis Video Streams(KVS)产品,具体内容是基于亚马逊云的 KVS 使用一款老旧的安卓手机实现一个视频监控系统。 ## 一、Amazon KVS 简介 在正式开始前,我们首先介绍一下 KVS。Amazon KVS 是一项完全托管的亚马逊云科技服务,KVS 支持捕获来自数百万种源的海量实时视频数据传输到 Amazon云,比如智能手机、安全摄像头、网络摄像头、车载摄像头、无人机等。Amazon KVS 有如下几个优势: (1)可以为海量设备提供实时视频传输服务; (2)通过与 [Amazon Rekognition](https://aws.amazon.com/cn/rekognition/?trk=cndc-detail) 等托管服务集成可以非常方便的构建智能视觉应用; (3)使用 KVS HTTP 实时流 (HLS) 可以轻松地将 KVS 中的实时和录制媒体流式传输到浏览器或者移动应用程序; (4)KVS 支持使用 IAM 控制对流的访问,并且提供对静态与动态数据的安全保护; (5)KVS 使用 S3 作为底层数据存储,借助 KVS能够根据设备和服务生成的时间戳,快速搜索和检索视频片段。 ## 二、帐号注册 体验 KVS,需要先注册一个亚马逊云的账户,填写用户名、密码、个人、公司等信息后,完成注册,具体操作如下: https://dev.amazoncloud.cn/user/register?trk=cndc-detail ![image.png](https://dev-media.amazoncloud.cn/098f13dda8554fc8b4f7a52249a74b70_image.png "image.png") 注册完成后并更新必要的信息,比如帐号,操作完成后如下图所示: ![image.png](https://dev-media.amazoncloud.cn/61dbdad2228e43999b77db36dd6b42be_image.png "image.png") ## 三、创建媒体流 进入 Amazon 的 KVS 管理控制台,打开控制面板,点击“创建视频流”按钮,如下图所示: ![image.png](https://dev-media.amazoncloud.cn/6bbdbb1b5fbf441dbfc374c720524473_image.png "image.png") 进入新的创建视频流页面,如下图所示,输入视频流名称等信息。 ![image.png](https://dev-media.amazoncloud.cn/b57a5304fd2c4c2ead97d4e5c2870c99_image.png "image.png") ## 四、下载开发工具包 媒体流创建好之后,就可以下载对应平台的开发工具包了。 ![image.png](https://dev-media.amazoncloud.cn/c7c5c505eed54edcb2a32dbaa502d2b6_image.png "image.png") 因为终端设备是一款老旧的安卓手机,所以下载 Android 开发包。在生成工具包之前,需要先配置 cognito user pool和identify pool 信息,这样下载的工具包就可以直接使用了。 ## 五、生成监控终端 APP 1. 下载工程代码 执行如下命令同步仓库代码: `\$ git clone https://github.com/awslabs/aws-sdk-android-samples` 然后,修改配置文件 AmazonKinesisVideoDemoApp/src/main/res/raw/awsconfiguration.json ,参考内容如下: ```js { "Version": "1.0", "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "us-west-2:01234567-89ab-cdef-0123-456789abcdef", "Region": "us-west-2" } } }, "IdentityManager": { "Default": {} }, "CognitoUserPool": { "Default": { "AppClientSecret": "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmno", "AppClientId": "0123456789abcdefghijklmnop", "PoolId": "us-west-2_qRsTuVwXy", "Region": "us-west-2" } } } ``` 2. 关键代码 接下来,我们简单介绍几段关键代码,首先我们需要创建一个 KVS 实例,它是所有音视频服务能力的提供者。这一点和其他所有 PaaS 服务提供商的方案是一致的,都是必不可少的一步,示例代码如下: ```js mKinesisVideoClient = KinesisVideoAndroidClientFactory.createKinesisVideoClient( getActivity(), KinesisVideoDemoApp.KINESIS_VIDEO_REGION, KinesisVideoDemoApp.getCredentialsProvider()); ``` 然后,创建一个 MediaSource 实例,代码如下: ```js private AndroidCameraMediaSourceConfiguration getCurrentConfiguration() { return new AndroidCameraMediaSourceConfiguration( AndroidCameraMediaSourceConfiguration.builder() .withCameraId(mCamerasDropdown.getSelectedItem().getCameraId()) .withEncodingMimeType(mMimeTypeDropdown.getSelectedItem().getMimeType()) .withHorizontalResolution(mResolutionDropdown.getSelectedItem().getWidth()) .withVerticalResolution(mResolutionDropdown.getSelectedItem().getHeight()) .withCameraFacing(mCamerasDropdown.getSelectedItem().getCameraFacing()) .withIsEncoderHardwareAccelerated( mCamerasDropdown.getSelectedItem().isEndcoderHardwareAccelerated()) .withFrameRate(FRAMERATE_20) .withRetentionPeriodInHours(RETENTION_PERIOD_48_HOURS) .withEncodingBitRate(BITRATE_384_KBPS) .withCameraOrientation(-mCamerasDropdown.getSelectedItem().getCameraOrientation()) .withNalAdaptationFlags(StreamInfo.NalAdaptationFlags.NAL_ADAPTATION_ANNEXB_CPD_AND_FRAME_NALS) .withIsAbsoluteTimecode(false)); } ...... mCameraMediaSource = (AndroidCameraMediaSource) mKinesisVideoClient .createMediaSource(mStreamName, mConfiguration); ``` 最后,开始采集并发送数据,这一步需要用到上一步的MediaSource实例,本质上就是启动一个线程完成视频采集和媒体数据的发送任务,示例代码如下: `mCameraMediaSource.start();` 3. 安装 App 使用 Android Studio 编译打包,并安装到安卓手机上。 ## 六、效果展示 开发 Amazon KVS 控制后台,在媒体流中打开视频预览窗口,最开始会自动搜索视频流,如下图所示: ![image.png](https://dev-media.amazoncloud.cn/fd6eac3a414846e098c1379f6fa7f4f2_image.png "image.png") 等视频内容加载出来之后如下图所示: ![image.png](https://dev-media.amazoncloud.cn/771c523bdad0495c9b9b918bd1b169c3_image.png "image.png") 至此,亚马逊云的 KVS 产品就算体验完了,整体上感觉还是非常简单的,只是账号注册和工程配置比较繁琐一些。其实,个人建议可以提供若干个公共的试用账号来让大家完成 demo 体验,否则,前边的流程太复杂容易劝退新用户。 *审核人:snxzheng*
0
目录
关闭