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는 단일 기기에서 수백만 기기에 이르기까지 분석 및 기계 학습을 위해 비디오를 캡처, 처리 및 보관하는 서비스입니다. 고객은 Kinesis Video를 기계 학습 알고리즘과 함께 사용하여 홈 오토메이션에서 스마트 시티 및 산업용 자동화 및 보안에 이르는 모든 사용 사례를 지원할 수 있습니다.

AWS에서는 고객 피드백을 반영하여 지난 몇 개월 동안 GStreamer용 플러그인, 오픈 소스 멀티미디어 프레임워크, 도커 컨테이너를 비롯한 여러 가지 기능을 출시하여 Kinesis에 비디오를 쉽게 스트리밍할 수 있도록 만들었습니다. 이러한 각 기능은 시간을 들여 상세히 다룰 수 있지만 오늘은 새로운 HLS 출력 기능에 초점을 맞추어 보겠습니다! 한 가지 미리 경고 드리자면 이 게시글에는 전혀 정돈되지 않은 제 사무실 사진이 몇 장 포함되어 있습니다.

HLS 출력은 고객이 Kinesis Video Streams를 위한 HLS 엔드포인트를 생성할 수 있게 해 주는 편리한 새 기능으로서, 라이브 및 온디맨드 비디오를 재생할 수 있는 사용자 지정 UI 및 도구를 제작할 때 유용합니다. HLS 기반의 재생 기능은 완전히 관리되므로 고객은 수신 미디어를 다중화하는 인프라를 구축하지 않아도 됩니다. 최대 5개(현재 사양)의 새로운 스트리밍 세션을 생성하고 새로운 GetHLSStreamingSessionURL API를 사용하면 바로 기능을 제공할 수 있습니다. HLS의 장점은 이미 산업 표준으로 자리잡았으며 JW Player, hls.js, VideoJS, Google의 Shaka Player와 같은 기존 웹 플레이어를 매우 쉽게 활용할 수 있으며 Android의 Exoplayer 및 iOS의 AV Foundation을 통해 모바일 앱에서 기본 렌더링까지 가능하다는 것입니다. API를 간단히 살펴보겠습니다. 원하는 경우 아래의 단계별 안내 부분으로 바로 건너뛰셔도 됩니다.

Kinesis Video HLS 출력 API

블로그에서 다룰 수 있는 부분 이상의 세부적인 내용은 설명서에서 다루고 있지만 저는 전반적인 구성 요소에 대해 설명해 드리겠습니다.

  1. GetDataEndpoint API로 엔드포인트를 가져옵니다.
  2. GetHLSStreamingSessionURL API로 해당 엔드포인트를 사용하여 HLS 스트리밍 URL을 가져옵니다.
  3. 원하는 도구로 HLS URL의 콘텐츠를 렌더링합니다!

이 작업은 Jupyter 노트북에서 약간의 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']

HLS 스트림을 기본적으로 렌더링할 수 있는 Safari에서 바로 모든 것을 시각화할 수도 있습니다.

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 스트림은 반드시 필요하며 Kinesis Video Streams 콘솔에서 쉽게 생성할 수 있습니다.

이제 스트림에 콘텐츠를 가져와야 합니다. 여기에는 몇 가지 옵션이 있습니다. 그 중 가장 쉬운 방법은 도커 컨테이너일 것입니다. 저는 github의 스크립트를 따라 mac에서 GStreamer 플러그인을 로컬로 컴파일하는 보다 모험적인 경로를 선택했습니다. 미리 경고 드리지만 이 플러그인의 컴파일은 시간이 좀 소요될 수 있으며 컴퓨터가 상당히 과열될 수 있습니다.

새롭게 컴파일된 gst-launch-1.0kvssink 플러그인 같은 GStreamer 바이너리를 사용하면 맥북의 웹캠 또는 다른 모든 GStreamer 소스에서 Kinesis Video Streams로 바로 스트리밍을 할 수 있습니다. kvssink 출력 플러그인을 사용하면 데이터가 바로 비디오 스트림으로 변환됩니다. 이 기능에는 구성해야 할 몇 가지 파라미터가 있으므로 유의하시기 바랍니다.

다음은 제가 맥북의 웹캠에서 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는 온디맨드 세그먼트와 라이브 스트림을 다양한 타임스탬프에서 재생할 수 있도록 몇 가지 파라미터를 지원합니다.

추가 정보

HLS를 사용하여 Kinesis Video Streams에서 소비하는 데이터에는 미국 동부(버지니아 북부)미국 서부(오레곤)에서 GB당 0.0119 USD의 요금이 부과되며 다른 지역에 대한 요금은 서비스 요금 페이지에서 확인할 수 있습니다. 이 기능은 이제 Kinesis Video Streams가 제공되는 모든 리전에서 사용할 수 있습니다.

Kinesis Video 팀은 Kinesis Video Stream 콘텐츠를 더 많은 대상에게 쉽게 제공할 수 있도록 MediaLive와 같은 AWS 미디어 서비스와의 통합을 확대하기 위해 노력 중이라고 저에게 알려 왔습니다.

언제나처럼 트위터 또는 의견란을 통해 귀하의 의견을 알려주시기 바랍니다. 저는 이 기능을 시험하는 지난 며칠 동안 정말 즐거운 시간을 보냈습니다. 고객 여러분도 이 기능을 통해 멋진 새로운 도구를 제작하실 수 있을 것입니다!

Randall