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
블로그에서 다룰 수 있는 부분 이상의 세부적인 내용은 설명서에서 다루고 있지만 저는 전반적인 구성 요소에 대해 설명해 드리겠습니다.
- GetDataEndpoint API로 엔드포인트를 가져옵니다.
- GetHLSStreamingSessionURL API로 해당 엔드포인트를 사용하여 HLS 스트리밍 URL을 가져옵니다.
- 원하는 도구로 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.0
및 kvssink
플러그인 같은 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
Leave a Reply