AWSKinesisVideoStreams:全面解析与实践应用
立即解锁
发布时间: 2025-08-30 01:42:08 阅读量: 11 订阅数: 12 AIGC 

### AWS Kinesis Video Streams:全面解析与实践应用
#### 1. 片段规则与处理流程
片段(Fragments)有严格的规则:
- 时间码跨度小于10秒。
- 数据量不超过50 MB。
- 每个轨道至少包含一帧。
- 轨道数量不超过3个。
当片段到达时,Kinesis会执行以下步骤:
1. 为每个片段自动分配一个升序的唯一编号。
2. 将片段与媒体元数据和Kinesis元数据副本合并,元数据包括片段编号、服务器端时间戳和生产者端时间戳。
3. 对数据块进行索引,可通过片段编号、生产者时间戳和服务器时间戳对流进行查询。
```mermaid
graph LR
A[片段到达] --> B[分配唯一编号]
B --> C[合并元数据]
C --> D[索引数据块]
```
#### 2. 流(Stream)的特性
流是AWS的基础资源,用于摄取、存储和提供时间编码数据。每个流可支持多个消费者,但通常每个流只有一个生产者,数据最长可保留10年。
#### 3. Kinesis生产者
PutMedia API接受MKV容器格式的数据,可实时或批量发送。由于KVS不进行转码,输入什么就输出什么。为利用支持播放的高级API,视频需编码为H.264,该API读取媒体数据的速率为12.5 MB/秒或100 Mbps。
#### 4. 生产者SDK
- **低级SDK**:用C语言以平台无关的方式编写,专注于状态管理、缓冲区管理、网络管理和视频分块,为硬件制造商开发定制固件设计,通过面向对象包装器提供C++和Java访问。
- **平台SDK**:将低级功能打包到GStreamer插件中,使用GStreamer的托管媒体管道,方便从网络摄像头或物联网摄像头捕获视频并发送到KVS。KVS Producer SDK使用GStreamer sink元素`kvssink`发送数据。Android生产者库提供Java接口连接相机并发送数据。
- **Docker镜像**:AWS提供预配置的Docker镜像,已配置GStreamer管道,可快速启动。镜像位于私有ECR注册表,访问和执行说明见[此处](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-gstreamer-plugin.html)。
#### 5. 消费视频的方式
KVS中有四种主要查看视频的方式:
| 方式 | 说明 |
| ---- | ---- |
| GetMedia | - |
| MPEG - DASH Streaming URL | 生成可在浏览器或媒体播放器中查看视频的URL |
| HLS Streaming URL | 生成可在浏览器或媒体播放器中查看视频的URL |
| GetClip | 方便用户导出视频片段用于机器学习或支持业务流程 |
KVS Parser Library为GetMedia API提供Java包装器,这里重点介绍`kinesis - video - archived - media CLI`。
#### 6. GetClip操作步骤
1. 调用`GetDataEndpoint`并指定流名称和端点类型,`api - name`参数值为`"GET_CLIP"`。
2. 使用`jq`工具从`get - data - endpoint`命令返回的JSON中提取端点URL。
3. 指定`FragmentSelectorType`的起始和结束时间戳。
4. 执行`get - clip`命令下载MP4文件。
```bash
STREAM_NAME="<STREAM NAME>"
API_NAME="GET_CLIP"
ENDPOINT_JSON=$(aws kinesisvideo get-data-endpoint --stream-name $STREAM_NAME --api-name $API_NAME)
ENDPOINT=$(jq -r '.DataEndpoint' <<< $ENDPOINT_JSON)
FRAGMENT="FragmentSelectorType=SERVER_TIMESTAMP,TimestampRange={StartTimestamp=2021-01-01T05:58:00,EndTimestamp=2021-01-01T05:59:00}"
aws kinesis-video-archived-media get-clip --stream-name $STREAM_NAME --clip-fragment-selector $FRAGMENT --endpoint-url $ENDPOINT myvideo.mp4
```
#### 7. GetDASHStreamingSessionURL操作步骤
1. 调用`GetDataEndpoint`,`api - name`参数值为`GET_DASH_STREAMING_SESSION_URL`。
2. 选择播放模式(LIVE、LIVE_REPLAY、ON_DEMAND),这里选择`ON_DEMAND`并指定1分钟间隔。
3. 执行`get - dash - streaming - session - url`命令获取认证URL。
```bash
STREAM_NAME="<STREAM NAME>"
API_NAME="GET_DASH_STREAMING_SESSION_URL"
ENDPOINT_JSON=$(aws kinesisvideo get-data-endpoint --stream-name $STREAM_NAME --api-name $API_NAME)
ENDPOINT=$(jq -r '.DataEndpoint' <<< $ENDPOINT_JSON)
EXPIRES=4000
PLAYBACK_MODE="ON_DEMAND"
FRAGMENT="FragmentSelectorType=SERVER_TIMESTAMP,TimestampRange={StartTimestamp=2021-01-01T05:58:00,EndTimestamp=2021-01-01T05:59:00}"
aws kinesis-video-archived-media get-dash-streaming-session-url --stream-name $STREAM_NAME --playback-mode $PLAYBACK_MODE --expires $EXPIRES --endpoint-url $ENDPOINT --dash-fragment-selector $FRAGMENT
```
#### 8. 创建流
创建流时,只需为账户和区域提供唯一名称,还可将数据保留配置从默认的1天改为最长10年。也可使用AWS CLI创建,示例如下:
```bash
aws kinesisvideo create-stream --stream-name "myStream" --data-retention-in-hours "24"
```
#### 9. 数据生产
- **使用Docker生产**
1. 认证Docker客户端:
```bash
Aws ecr get-login-password –region us-west-2 | docker login –username AWS –password-stdin 546150905175.dkr.ecr.us-west-2.amazonaws.com
```
2. 下载Docker镜像:
```bash
sudo docker pull 54615090
```
0
0
复制全文
相关推荐
