Amazon Web Services ブログ

Amazon Kinesis Video Streams に、HLS 出力ストリームのサポートを追加

Amazon Kinesis Video Streams (KVS) 用の HTTP Live Streams (HLS) に、新しい出力機能が追加されました。今日は、それをデモンストレーションしてみようと思います。KVS をよくご存知でないなら、Jeff が こちらのリリースで取り上げていますので、ご参照ください。このリリースは 2017 年の AWS re:Invent のためのものです。簡単に言うと、Amazon Kinesis Video Streams は、1 台あるいは数百万台のデバイスから、アナリティクスや機械学習用の動画を安全にキャプチャ、処理、および保存するサービスです。家庭用オートメーションやスマートシティと言ったものから、産業用オートメーションやセキュリティに至るまで、あらゆるものに電力を供給するため、機械学習アルゴリズムを使ったKinesis Video が利用されています。

お客様と意見をやり取りした後、この数か月で GStreamer のプラグイン 、一般的に普及しているオープンソースのマルチメディアフレームワーク、および Docker コンテナを含む数多くの機能を立ち上げました。これにより、Amazon Kinesis に動画をストリーミングすることが容易になりました。各新機能の詳しいご紹介はまた次の機会にして、今日は、新しい HLS 出力機能についてご説明したいと思います。このブログ投稿では、ひどく散らかった私のオフィスの写真をいくつか載せていますことをご了承ください。

HLS 出力は、Amazon Kinesis Video Streams の HLS エンドポイントを作成するのに便利な新機能です。ライブおよびオンデマンド動画を再生するカスタム UI やツールを構築するのに役立ちます。HLS ベースの再生機能は完全マネージド型のため、受信メディアを多重化するためのインフラストラクチャを構築する必要はありません。新しい GetHLSStreamingSessionURL API を使って、新規のストリーミングセッションを ( 現在のところ ) 最大 5 つ作成するだけです。HLS の素晴らしい点は、既に業界標準であり、JW Playerhls.jsVideoJSGoogle の Shaka Player 、あるいはモバイルアプリでネイティブレンダリング可能な Android の Exoplayer や iOS の AV Foundation といった既存のウェブプレーヤーで活用しやすいというところにあります。API を簡単に見てみましょう。以下の説明部分は、スキップしてくださっても結構です。

Kinesis Video の HLS 出力 API

ドキュメント」では、ブログでの説明よりも更に詳細にご紹介していますが、こちらでは広範の要素をカバーしています。

  1. GetDataEndpoint API で、エンドポイントを取得する。
  2. このエンドポイントを使用して、GetHLSStreamingSessionURL API を使った HLS ストリーミング URL を取得する。
  3. お好きなツールを使って、HLS URL のコンテンツをレンダリングする。

Python と boto3 のちょっとしたコードを使用して、Jupyter ノートブック上でとても簡単に行えます。

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 Video Stream が必要ですが、これで、Kinesis Video Streams Console 内に簡単に作成が可能となります。

ここで、ストリームにいくつかのコンテンツを取得する必要があります。これには、いくつかのオプションがあります。恐らく、最も簡単なのは Docker コンテナを使うことでしょう。ここでは、より挑戦的な方法をやってみることにします。github にあるスクリプトに沿って、GStreamer プラグインを私の Mac 上でローカルにコンパイルします。このプラグインのコンパイルにはかなり時間がかかるため、コンピュータが暖房器具へと変身してしまう可能性があることを警告しておきます。

これで、 gst-launch-1.0Kvssink プラグインのような新しくコンパイルした GStreamer バイナリを使用して、 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

Amazon Kinesis にいくつかのデータをストリーミングしているので、開始のためのサンプルの静的ウェブサイトを使って、いくつかの異なるビデオプレーヤーで HLS ストリーミングをテストしてみましょう。AWS の認証情報を記入し、再生を開始するよう指示します。GetHLSStreamingSessionURL API は、数多くのパラメータをサポートしているので、多様なタイムスタンプからオンデマンドセグメントとライブストリーミングのどちらも再生が可能です。

追加情報

HLS を使った Kinesis Video Streams に消費されるデータは、米国東部 ( バージニア北部 )米国西部 ( オレゴン ) では、GB 当たり 0.0119 USD かかります。他のリージョンの価格は、service pricing page でご確認ください。この機能は、Kinesis Video Streams を使用できる全リージョンで利用可能です。

Kinesis Video チームは、MediaLive のような AWS メディアサービスとの統合をより強化し、さらなる視聴者に Kinesis Video Stream コンテンツを配信できるよう取り組んでおります。

Twitter やコメント欄で、あなたのご意見をぜひお知らせください。ここ数日、この機能を使って楽しく遊んでいました。この機能で、新しいツールがもっと生まれることを期待しています。

こちらです。