现如今,在线教育,已经被越来越多学校和机构,及家长所接受。有在线教育,就要有在线考试。而监考是考试的一个重要的环节。如何通过技术方式,简单快捷的实现在线监考,监考回看的需求呢?通过Amazon Kinesis Video Streams,可以轻松实现监考需求。今天我们通过KVS,实现端到端的监考视频流架构。

KVS简介

利用 Amazon Kinesis Video Streams,您可以轻松而安全地将视频从互联设备流式传输到 AWS,用于分析、机器学习 (ML)、播放以及其他处理。Kinesis Video Streams 可以自动预置和弹性扩展从数百万台设备中提取视频流所需的所有基础设施。它可以持久存储和加密流中的视频数据并为其创建索引,还允许您通过易用的 API 访问您的数据。借助 Kinesis Video Streams,您可以直播和点播视频,并可以与 Amazon Rekognition Video 和用于机器学习框架(例如 Apache MxNet、TensorFlow 和 OpenCV)的库集成,从而快速构建利用计算机视觉和视频分析的应用程序。Kinesis Video Streams 还支持开源项目 WebRTC,它可通过简单的 API 在 Web 浏览器、移动应用程序和连接的设备之间进行实时媒体流式传输与交互。 一般用途包括视频聊天和对等媒体流式传输。

KVS视频流原理图

KVS提供两种视频流输入:

•通过WebRtc公有协议输入

•通过集成KVS SDK,使用KVS私有协议输入

KVS视频承载模式有和Streams两种方式

•Channel方式,可以实时在线监控

•Stream方式,可以下载MP4格式到S3

本文将利用KVS,逐步实现需求。

先将手机或者电脑摄像头的视频流,发送给KVS。然后通过KVS如何监看,下载等

1. 创建KVS video stream,只需一步即可

基于Amazon Kinesis Video Streams的线上考试监考方案_KVS

2. 创建Channel,也仅需一步

基于Amazon Kinesis Video Streams的线上考试监考方案_aws_02

3. 摄像头小工具

为了方便测试KVS功能,awslabs提供下面链接,可以利用电脑或者手机摄像头,将视频流上传到KVS中

https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html

使用方法
  1. 打开链接
  2. 输入Region,AK/SK
  3. Channel Name (在KVS中创建)
  4. 点击“Start Master”

基于Amazon Kinesis Video Streams的线上考试监考方案_KVS_03

打开后,如下页面

基于Amazon Kinesis Video Streams的线上考试监考方案_视频流_04

注意:需要点击“Join Session”,才会录制画面

基于Amazon Kinesis Video Streams的线上考试监考方案_KVS_05

4. KVS存储设置

由于我们需要保持KVS的视频,所以需要在中AWS CLI,设置媒体存储配置。参考文档:配置媒体摄取和存储

https://docs.aws.amazon.com/zh_cn/kinesisvideostreams-webrtc-dg/latest/devguide/configure-ingestion.html

获取ARN信息:

  1. 控制台获取
  2. AWS CLI方式获取,要保证CLI是最新版本。

要检索频道 ARN,请键入

aws kinesisvideo describe-signaling-channel --channel-name <your-channel-name> --region us-west-2

Example:
aws kinesisvideo describe-signaling-channel --channel-name test --region us-west-2

输出:

{
    "ChannelInfo": {
        "ChannelName": "test",
        "ChannelARN": "arn:aws:kinesisvideo:us-west-2:4635xxxxx9389:channel/test/1680862266281",
        "ChannelType": "SINGLE_MASTER",
        "ChannelStatus": "ACTIVE",
        "CreationTime": "2023-04-07T18:11:06.281000+08:00",
        "SingleMasterConfiguration": {
            "MessageTtlSeconds": 60
        },
        "Version": "AyqrocAWYPfTcEtry2NJ"
    }
}
检索数据流 ARN命令,也可以通过aws console查看
aws kinesisvideo describe-stream --stream-name <your-stream-name> --region us-west-2

Example:
aws kinesisvideo describe-stream --stream-name  test --region us-west-2
输出信息
{
    "StreamInfo": {
        "StreamName": "test",
        "StreamARN": "arn:aws:kinesisvideo:us-west-2:4635xxxxx9389:stream/test/1680794802571",
        "KmsKeyId": "arn:aws:kms:us-west-2:4635xxxxx9389:alias/aws/kinesisvideo",
        "Version": "BNuU81iUCTgTU8F9W9Lv",
        "Status": "ACTIVE",
        "CreationTime": "2023-04-06T23:26:42.571000+08:00",
        "DataRetentionInHours": 24
    }
}
获得 ARN 后,设置媒体存储配置。类型:
aws kinesisvideo update-media-storage-configuration \
--channel-arn <your-arn> \     
--media-storage-configuration \
StreamARN="<your-stream-arn>",Status="ENABLED" \     
--region us-west-2 

Example:
 aws kinesisvideo update-media-storage-configuration \
--channel-arn arn:aws:kinesisvideo:us-west-2:4635xxxxx9389:channel/test/1680862266281 \
--media-storage-configuration \
StreamARN="arn:aws:kinesisvideo:us-west-2:4635xxxxx9389:stream/test/1680794802571",Status="ENABLED" \
--region us-west-2

5. 环境已经准备完成,下面开始实际测试环节:

5.1. 手机做摄像头master,电脑端浏览器reviewer

基于Amazon Kinesis Video Streams的线上考试监考方案_KVS_06


5.2. 通过aws kvs Media playback观看

基于Amazon Kinesis Video Streams的线上考试监考方案_视频流_07

5.3. 根据分钟指定下载周期,示例:下载10分钟mp4视频

基于Amazon Kinesis Video Streams的线上考试监考方案_视频流_08

5.4. 根据时间段,选择下载视频范围

基于Amazon Kinesis Video Streams的线上考试监考方案_视频流_09

5.5. 下载完成后,本地电脑浏览器会自动弹出播放

基于Amazon Kinesis Video Streams的线上考试监考方案_视频流_10


实际生产环境,肯定是通过程序调用下载。具体参考命令行下载方式:https://docs.aws.amazon.com/zh_cn/kinesisvideostreams/latest/dg/API_reader_GetClip.html

6. 注意:单个下载MP4大小和时长是有限制的

重点:

要重新理解这句话:

The clip may not contain all of the media in the selected range as clips are limited to 100 MB in size and 200 fragments in length.

每个Clip片段下载,最大100M(或者200片段)

如下图Fragment是10s,也就是说。下载MP4不但要小于100M,还要低于33分钟(10s x 200= 33.3Mins)。所以经过多次测试,即使选择

基于Amazon Kinesis Video Streams的线上考试监考方案_视频流_11


示例:下载视频时间设置为一小时,但是单个文件最大能下载35分钟。

基于Amazon Kinesis Video Streams的线上考试监考方案_KVS_12

下载视频为35分钟,也刚好小于100M

基于Amazon Kinesis Video Streams的线上考试监考方案_KVS_13

建议

所以,针对视频流,可以小于30分钟内请求一次下载,下载视频根据实际分辨率(Video resolution)情况,设置为20~30分钟的一个区间。下载并保存到S3.

更多限制,请参考KVS Limits

https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html


7. 多客户端上传,观看

多channel同时录制,和观看。 分别创建test,test1,test2三个channel进行测试。

7.1. test1,test2没有开启storage enbale之前,可以通过Signaling channels-->Media playback viewer可以直接观看,无延迟。

基于Amazon Kinesis Video Streams的线上考试监考方案_aws_14

7.2. test已经设置storage Enable,需要在Video Streams --> Media playback 查看视频和下载MP4. Channel playback不能查看了。
7.3. Steam和Channel是一一对应的,不能一个stream挂载两个Channel
aws kinesisvideo update-media-storage-configuration \
--channel-arn arn:aws:kinesisvideo:us-west-2:463531959389:channel/test1/1681108912103 \
--media-storage-configuration \
StreamARN="arn:aws:kinesisvideo:us-west-2:463531959389:stream/stream2/1680973794062",Status="ENABLED" \
--region us-west-2

An error occurred (ResourceInUseException) when calling the UpdateMediaStorageConfiguration operation: The channel/stream is currently not available for this operation because it is being updated.

场景:

业务端在有监控需求时,根据摄像头数,即使创建channel和stream,根据是否录制需求考虑是否创建stream,是否开启storage Enable等。

参考文档:

https://docs.aws.amazon.com/zh_cn/kinesisvideostreams-webrtc-dg/latest/devguide/kvswebrtc-sdk-js.html

写在文末:

疲于工作,过于焦躁,生活节奏紊乱。

停下来,静一静,想一想,吃顿美食,写篇文章。

心态慢下来,效率反倒高起来。