Select your cookie preferences

We use essential cookies and similar tools that are necessary to provide our site and services. We use performance cookies to collect anonymous statistics, so we can understand how customers use our site and make improvements. Essential cookies cannot be deactivated, but you can choose “Customize” or “Decline” to decline performance cookies.

If you agree, AWS and approved third parties will also use cookies to provide useful site features, remember your preferences, and display relevant content, including relevant advertising. To accept or decline all non-essential cookies, choose “Accept” or “Decline.” To make more detailed choices, choose “Customize.”

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

re:Invent
Amazon Kinesis Video Streams
2023-03-15
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*

前言

近两年,由于疫情等的因素影响,音视频技术相当火热。很多云厂商都推出了自己音视频相关的很多服务,亚马逊云也不例外,除了 Chime 以外,还有一款产品 Kinesis Video Streams(KVS)。据亚马逊云科技 AIoT 产品专家表示,Amazon Kinesis Video Streams(KVS)是 Amazon IoT 产品家族中的王牌产品之一,其主要功能之一,是获取、封装和存储视频流用于播放、分析和机器学习;其二,则是1秒以内的超低延时实时音视频服务。

正文

本文将通过一个案例来介绍一下亚马逊云的 Kinesis Video Streams(KVS)产品,具体内容是基于亚马逊云的 KVS 使用一款老旧的安卓手机实现一个视频监控系统。

一、Amazon KVS 简介

在正式开始前,我们首先介绍一下 KVS。Amazon KVS 是一项完全托管的亚马逊云科技服务,KVS 支持捕获来自数百万种源的海量实时视频数据传输到 Amazon云,比如智能手机、安全摄像头、网络摄像头、车载摄像头、无人机等。Amazon KVS 有如下几个优势:

(1)可以为海量设备提供实时视频传输服务;

(2)通过与 Amazon Rekognition 等托管服务集成可以非常方便的构建智能视觉应用;

(3)使用 KVS HTTP 实时流 (HLS) 可以轻松地将 KVS 中的实时和录制媒体流式传输到浏览器或者移动应用程序;

(4)KVS 支持使用 IAM 控制对流的访问,并且提供对静态与动态数据的安全保护;

(5)KVS 使用 S3 作为底层数据存储,借助 KVS能够根据设备和服务生成的时间戳,快速搜索和检索视频片段。

二、帐号注册

体验 KVS,需要先注册一个亚马逊云的账户,填写用户名、密码、个人、公司等信息后,完成注册,具体操作如下:

https://dev.amazoncloud.cn/user/register?trk=cndc-detail

image.png

注册完成后并更新必要的信息,比如帐号,操作完成后如下图所示:

image.png

三、创建媒体流

进入 Amazon 的 KVS 管理控制台,打开控制面板,点击“创建视频流”按钮,如下图所示:

image.png

进入新的创建视频流页面,如下图所示,输入视频流名称等信息。

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 ,参考内容如下:

{
  "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"
    }
  }
}
  1. 关键代码

接下来,我们简单介绍几段关键代码,首先我们需要创建一个 KVS 实例,它是所有音视频服务能力的提供者。这一点和其他所有 PaaS 服务提供商的方案是一致的,都是必不可少的一步,示例代码如下:

mKinesisVideoClient = KinesisVideoAndroidClientFactory.createKinesisVideoClient(
                    getActivity(),
                    KinesisVideoDemoApp.KINESIS_VIDEO_REGION,
                    KinesisVideoDemoApp.getCredentialsProvider());

然后,创建一个 MediaSource 实例,代码如下:

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();

  1. 安装 App 使用 Android Studio 编译打包,并安装到安卓手机上。

六、效果展示

开发 Amazon KVS 控制后台,在媒体流中打开视频预览窗口,最开始会自动搜索视频流,如下图所示:

image.png

等视频内容加载出来之后如下图所示:

image.png

至此,亚马逊云的 KVS 产品就算体验完了,整体上感觉还是非常简单的,只是账号注册和工程配置比较繁琐一些。其实,个人建议可以提供若干个公共的试用账号来让大家完成 demo 体验,否则,前边的流程太复杂容易劝退新用户。

审核人:snxzheng

0
目录
关闭