亚马逊AWS官方博客
Amazon Kinesis Video Streams 增加对 HLS 输出流的支持
今天向大家演示适用于 Amazon Kinesis Video Streams (KVS) 的 HTTP Live Streams (HLS) 输出功能。如果您还不熟悉 KVS,请参阅 Jeff 在 2017 年为 AWS re:Invent 编写的发行介绍。简而言之,Amazon Kinesis Video Streams 是一种安全地截取、处理和存储视频,以用于分析和机器学习的服务 — 不论是从一台设备还是上百万台设备。 客户将 Kinesis Video 与机器学习算法配合使用,支持从家庭自动化、智慧城市到工业自动化和安全性的各个领域。
在客户反馈的基础上,过去几个月来我们推出了多项功能,包括一个 Gstreamer 插件(这是一种很流行的开放源多媒体框架)和 docker 容器(利用它可以方便地将视频流指向 Kinesis)。每个功能都可以花费很多篇幅来详细介绍,但今天我们要讲的是全新的 HLS 输出功能!先提醒一下,此文中的一些画面会涉及我那无比杂乱的办公室。
HLS 输出是一种方便的新功能,客户可通过它为其 Kinesis 视频流创建 HLS 终端节点,从而便于构建可以回放直播视频和点播视频的自定义 UI 和工具。基于 HLS 的回放功能是完全托管的,因此您不需要构建任何基础设施来传输复用传入的媒体。您只需使用新的 GetHLSStreamingSessionURL API 创建新的流会话即可,目前最高可创建 5 个会话。HLS 的一个优点在于它已经是一项行业标准,可以非常方便地利用 JW Player、hls.js、VideoJS、Google Shaka Player 等现有的 Web 播放器,甚至可以在移动应用程序中使用 Android Exoplayer 以及 iOS AV Foundation 原生渲染。下面我们快速了解一下该 API,您也可以随时跳过下面的演示。
Kinesis Video HLS 输出 API
文档提供了比博客更详细的信息,这里我将介绍大致的组件。
- 使用 GetDataEndpoint API 获取终端节点
- 使用 GetHLSStreamingSessionURL API 通过该终端节点获取 HLS 流 URL
- 使用您喜爱的任何工具在 HLS URL 中渲染内容!
使用 Jupyter Notebook 以及一点 Python 和 boto3 代码,这将非常简单。
import boto3
STREAM_NAME = "RandallDeepLens"
kvs = boto3.client("kinesisvideo")
# Grab the endpoint from GetDataEndpoint
endpoint = kvs.get_data_endpoint(
APIName="GET_HLS_STREAMING_SESSION_URL",
StreamName=STREAM_NAME
)['DataEndpoint']
# Grab the HLS Stream URL from the endpoint
kvam = boto3.client("kinesis-video-archived-media", endpoint_url=endpoint)
url = kvam.get_hls_streaming_session_url(
StreamName=STREAM_NAME,
PlaybackMode="LIVE"
)['HLSStreamingSessionURL']
您甚至可以直接在 Safari 中将所有项目可视化,从而原生渲染 HLS 流。
from IPython.display import HTML
HTML(data='<video src="{0}" autoplay="autoplay" controls="controls" width="300" height="400"></video>'.format(url))
我们还可以使用一点点代码直接从 AWS DeepLens 传入流:
import DeepLens_Kinesis_Video as dkv
import time
aws_access_key = "super_fake"
aws_secret_key = "even_more_fake"
region = "us-east-1"
stream_name ="RandallDeepLens"
retention = 1 #in minutes.
wait_time_sec = 60*300 #The number of seconds to stream the data
# will create the stream if it does not already exist
producer = dkv.createProducer(aws_access_key, aws_secret_key, "", region)
my_stream = producer.createStream(stream_name, retention)
my_stream.start()
time.sleep(wait_time_sec)
my_stream.stop()
如何使用 Kinesis Video Streams HLS 输出流
当然我们首先需要有 Kinesis 视频流,这可以在 Kinesis Video Streams 控制台轻松创建。
然后我们需要流的内容。在此方面我们有多个选项。也许最简单的选项是 docker 容器。我决定采取更为冒险的颁发,根据 github 上的脚本,在我的 Mac 电脑本地编译 GStreamer 插件。事先提醒一下,此插件的编译需要一些时间,可能导致您的计算机成为一台取暖器。
利用我们刚刚编译的 GStreamer 二进制代码,例如 gst-launch-1.0
和 kvssink
插件,直接直接从我的 Macbook 摄像头或者其他 GStreamer 获取流,输入到 Kinesis Video Streams。我使用的是 kvssink 输出插件,我的数据将在视频流中展开。在此方面有一些参数需要配置,因此要特别注意。
利用下面的示例命令,我将 Macbook 摄像头的流导入 Kinesis Video Streams:
gst-launch-1.0 autovideosrc ! videoconvert \
! video/x-raw,format=I420,width=640,height=480,framerate=30/1 \
! vtenc_h264_hw allow-frame-reordering=FALSE realtime=TRUE max-keyframe-interval=45 bitrate=500 \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au,width=640,height=480,framerate=30/1 \
! kvssink stream-name="BlogStream" storage-size=1024 aws-region=us-west-2 log-config=kvslog
现在我们已经有些数据流入 Kinesis,这时我可以使用几个不同的视频播放器,通过入门示例静态网站来测试我的 HLS 流。我刚刚填写了我的 AWS 凭证,并要求它开始播放。GetHLSStreamingSessionURL API 支持多种参数,因此您可以播放来自不同时间戳的点播片段和直播流。
其他信息
在美国东部(弗吉尼亚北部)和美国西部(俄勒冈)区域,Kinesis Video Streams 使用 HLS 时消费的数据价格为 0.0119 USD/GB, 其他区域的价格详见服务定价页面。此功能现已在提供 Kinesis Video Streams 的所有区域推出。
Kinesis Video 团队告诉我他们正在努力集成更多 AWS Media Services,例如 MediaLive,它可让您更方便地位更多受众服务 Kinesis 视频流。
与以往一样,我们欢迎您在 Twitter 上或通过评论告诉我们您的意见和建议。过去几天我一直在试用此功能,发现乐趣无穷,我很期待看到客户利用它构建一些新的工具!
– Randall