를 사용한 비디오 재생 HLS - Amazon Kinesis Video Streams

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

를 사용한 비디오 재생 HLS

HTTP라이브 스트리밍 (HLS) 은 업계 표준 HTTP 기반 미디어 스트리밍 통신 프로토콜입니다. 를 HLS 사용하여 Kinesis 비디오 스트림을 볼 수 있습니다. 라이브 재생 또는 아카이브된 비디오를 보는 데 사용할 수 있습니다.

라이브 HLS 재생에 사용할 수 있습니다. 지연 시간은 일반적으로 3~5초이지만 사용 사례, 플레이어 및 네트워크 상태에 따라 1~10초 사이일 수 있습니다. 타사 플레이어 (예: Video.js 또는 Google Shaka Player) 를 사용하여 프로그래밍 방식 또는 수동으로 HLS 스트리밍 세션을 URL 제공하여 비디오 스트림을 표시할 수 있습니다. Apple Safari 또는 Microsoft Edge 브라우저의 위치 표시줄에 HLS 스트리밍 세션을 URL 입력하여 비디오를 재생할 수도 있습니다.

를 사용하여 HLS Kinesis 비디오 스트림을 보려면 먼저 G etHLSStreaming Session을 사용하여 스트리밍 세션을 생성하십시오. URL 이 액션은 세션 액세스를 위한 a URL (세션 토큰 포함) 를 반환합니다. HLS 그런 다음 미디어 플레이어나 독립 실행형 URL 애플리케이션에서 를 사용하여 스트림을 표시할 수 있습니다.

중요

Kinesis Video Streams로 전송된 모든 미디어를 재생할 HLS 수 있는 것은 아닙니다. 특정 업로드 GetHLSStreamingSessionURL 요구 사항은 를 참조하십시오.

를 AWS CLI 사용하여 HLS 스트리밍 세션을 검색할 수 있습니다. URL

아래 절차에 따라 를 사용하여 Kinesis 비디오 URL 스트림용 HLS 스트리밍 세션을 생성하십시오. AWS CLI

설치 지침은 사용 AWS Command Line Interface 설명서를 참조하십시오. 설치 후 자격 증명 및 지역을 AWS CLI사용하여 구성하십시오.

또는 AWS CLI 설치 및 구성된 AWS CloudShell 터미널을 여십시오. 자세한 내용은 AWS CloudShell 사용 설명서를 참조하십시오.

Kinesis 비디오 스트림의 HLS URL 엔드포인트를 검색하십시오.
  1. 터미널에 다음을 입력합니다.

    aws kinesisvideo get-data-endpoint \ --api-name GET_HLS_STREAMING_SESSION_URL \ --stream-name YourStreamName

    다음과 같은 응답을 받게 됩니다.

    { "DataEndpoint": "https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com" }
  2. 반환된 엔드포인트에 HLS 스트리밍 세션을 URL 요청합니다.

    Live

    실시간 재생의 경우 HLS 미디어 재생 목록은 최신 미디어가 제공되는 대로 계속 업데이트됩니다. 미디어 플레이어에서 이러한 유형의 세션을 재생하면 일반적으로 사용자 인터페이스에 “실시간” 알림이 표시되며, 표시할 재생 창에서 위치를 선택할 수 있는 스크러버 컨트롤이 없습니다.

    이 명령을 실행할 때 미디어를 이 스트림에 업로드하고 있는지 확인하십시오.

    aws kinesis-video-archived-media get-hls-streaming-session-url \ --endpoint-url https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com \ --stream-name YourStreamName \ --playback-mode LIVE
    Live replay

    라이브 리플레이의 경우 지정된 시작 시간부터 재생이 시작됩니다. 또한 HLS 미디어 재생 목록은 최신 미디어가 제공되는 대로 계속 업데이트됩니다. 세션이 만료될 때까지 또는 지정된 종료 시간 중 먼저 도래하는 시점까지 세션에는 새로 수집된 미디어가 계속 포함됩니다. 이 모드는 이벤트가 감지된 시점부터 재생을 시작하고 세션 생성 시점에 아직 인제스트되지 않은 미디어를 계속 라이브 스트리밍할 수 있는 데 유용합니다.

    시작 타임스탬프를 결정하십시오.

    이 예제에서는 Unix Epoch 시간을 초 형식으로 사용합니다. 타임스탬프 형식에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 타임스탬프 섹션을 참조하십시오.

    변환 도구에 UnixTime대해서는.org를 참조하십시오.

    • 1708471800은 2024년 2월 20일 오후 3시 30분부터 08:00 까지 입니다. GMT

    이 예에서는 종료 타임스탬프를 지정하지 않습니다. 즉, 세션이 만료될 때까지 세션에 새로 수집된 미디어가 계속 포함됩니다.

    LIVE_REPLAY재생 모드를 지정하고 프래그먼트 GetHLSStreamingSessionURL API 셀렉터를 지정한 상태에서 를 HLS 호출합니다.

    aws kinesis-video-archived-media get-hls-streaming-session-url \ --endpoint-url https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com \ --stream-name YourStreamName \ --playback-mode LIVE_REPLAY \ --hls-fragment-selector \ "FragmentSelectorType=SERVER_TIMESTAMP,TimestampRange={StartTimestamp=1708471800}"
    On-demand

    온디맨드 재생의 경우 HLS 미디어 재생 목록에는 프래그먼트 셀렉터로 지정된 미디어가 포함됩니다. HLS 미디어 플레이어에서 이러한 유형의 세션을 재생하면 일반적으로 사용자 인터페이스에는 표시할 재생 창의 위치를 선택할 수 있는 스크러버 컨트롤이 표시됩니다.

    스트림의 특정 섹션에 URL 사용할 채널을 만들려면 먼저 시작 타임스탬프와 종료 타임스탬프를 결정해야 합니다.

    이 예제에서는 Unix Epoch 시간을 초 형식으로 사용합니다. 타임스탬프 형식에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 타임스탬프 섹션을 참조하십시오.

    변환 도구에 UnixTime대해서는.org를 참조하십시오.

    • 1708471800은 2024년 2월 20일 오후 3시 30분부터 08:00 까지 입니다. GMT

    • 1708471860은 2024년 2월 20일 오후 3:31:00 - 08:00 과 같습니다. GMT

    재생 모드와 프래그먼트 셀렉터를 지정한 상태에서 를 호출합니다. GetHLSStreamingSessionURL API ON_DEMAND HLS

    aws kinesis-video-archived-media get-hls-streaming-session-url \ --endpoint-url https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com \ --stream-name YourStreamName \ --playback-mode ON_DEMAND \ --hls-fragment-selector \ "FragmentSelectorType=SERVER_TIMESTAMP,TimestampRange={StartTimestamp=1708471800,EndTimestamp=1708471860}"
    참고

    설명서에 나와 있는 것처럼 타임스탬프는 서로 24시간 이내에 있어야 합니다. HLSTimestampRange

    다음과 같은 응답을 받게 됩니다.

    { "HLSStreamingSessionURL": "https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com/hls/v1/getHLSMasterPlaylist.m3u8?SessionToken=CiAz...DkRE6M~" }
    중요

    승인되지 않은 주체가 액세스할 수 있는 곳에 이 토큰을 공유하거나 보관하지 마십시오. 토큰은 스트림 콘텐츠에 대한 액세스를 제공합니다. AWS 자격 증명에 사용하는 것과 동일한 방법으로 토큰을 보호하십시오.

    이 URL HLS 스트림과 다른 HLS 플레이어를 사용하여 스트림을 볼 수 있습니다.

    예를 들어 VLC 미디어 플레이어를 사용하세요.

    Apple Safari 또는 Microsoft Edge 브라우저의 위치 표시줄에 HLS 스트리밍 세션을 URL 입력하여 HLS 스트림을 재생할 수도 있습니다.

예: 및 HLS 에서 HTML 사용 JavaScript

다음 예제는 AWS SDK for JavaScript v2를 사용하여 Kinesis 비디오 스트림의 HLS 스트리밍 세션을 검색하고 웹 페이지에서 재생하는 방법을 보여줍니다. 예제에서는 다음 플레이어에서 비디오를 재생하는 방법을 보여줍니다.

전체 예제 코드와 호스팅된 웹 페이지는 에서 확인하십시오. GitHub

AWS SDK JavaScript 브라우저용 양식 가져오기

웹 페이지에 다음 스크립트 태그를 포함하여 AWS SDK for JavaScript v2를 프로젝트로 가져오십시오.

<script src="https://cdnjs.cloudflare.com/ajax/libs/aws-sdk/2.490.0/aws-sdk.min.js"></script>

자세한 AWS SDK내용은 JavaScript 설명서를 참조하십시오.

Kinesis Video Streams 클라이언트 설정

를 사용하여 스트리밍 비디오에 액세스하려면 먼저 Kinesis Video Streams 클라이언트를 생성하고 구성하십시오. HLS 다른 인증 방법은 웹 브라우저에서 자격 증명 설정을 참조하십시오.

const clientConfig = { accessKeyId: 'YourAccessKey', secretAccessKey: 'YourSecretKey', region: 'us-west-2' }; const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);

응용 프로그램은 HTML 페이지의 입력 상자에서 필요한 값을 검색합니다.

재생을 위해 HLS 엔드포인트를 검색합니다.

Kinesis Video Streams 클라이언트를 사용하여 를 호출하여 GetDataEndpoint API 엔드포인트를 검색하십시오.

const getDataEndpointOptions = { StreamName: 'YourStreamName', APIName: 'GET_HLS_STREAMING_SESSION_URL' }; const getDataEndpointResponse = await kinesisVideoClient .getDataEndpoint(getDataEndpointOptions) .promise(); const hlsDataEndpoint = getDataEndpointResponse.DataEndpoint;

이 코드는 변수에 엔드포인트를 저장합니다. hlsDataEndpoint

Kinesis Video Streams 아카이브 미디어 클라이언트 설정

Kinesis Video Streams 아카이브 미디어 클라이언트의 클라이언트 구성에서 이전 단계에서 획득한 엔드포인트를 지정합니다.

const archivedMediaClientConfig = { accessKeyId: 'YourAccessKey', secretAccessKey: 'YourSecretKey', region: 'us-west-2', endpoint: hlsDataEndpoint }; const kinesisVideoArchivedMediaClient = new AWS.KinesisVideoArchivedMedia(archivedMediaClientConfig);

스트리밍 세션을 검색합니다. HLS URL

Kinesis Video Streams 아카이브 미디어 클라이언트를 사용하여 를 호출하여 재생을 GetHLSStreamingSessionURL API 검색하십시오. HLS URL

const getHLSStreamingSessionURLOptions = { StreamName: 'YourStreamName', PlaybackMode: 'LIVE' }; const getHLSStreamingSessionURLResponse = await kinesisVideoArchivedMediaClient .getHLSStreamingSessionURL(getHLSStreamingSessionURLOptions) .promise(); const hlsUrl = getHLSStreamingSessionURLResponse.HLSStreamingSessionURL;

웹 페이지에 HLS 스트림을 표시합니다.

HLS스트리밍 세션이 URL 시작되면 비디오 플레이어에 제공하십시오. 비디오 플레이어에 URL 제공하는 방법은 사용하는 플레이어에 따라 다릅니다.

Video.js

Video.js 및 해당 CSS 클래스를 브라우저 스크립트로 가져오려면 다음과 같이 하십시오.

<link rel="stylesheet" href="https://vjs.zencdn.net/6.6.3/video-js.css"> <script src="https://vjs.zencdn.net/6.6.3/video.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js"></script>

동영상을 표시할 video HTML 요소를 만드세요.

<video id="videojs" class="player video-js vjs-default-skin" controls autoplay></video>

를 HLS URL HTML 비디오 요소 소스로 설정:

const playerElement = document.getElementById('videojs'); const player = videojs(playerElement); player.src({ src: hlsUrl, type: 'application/x-mpegURL' }); player.play();
Shaka

Google Shaka 플레이어를 브라우저 스크립트로 가져오려면 다음과 같이 하세요.

<script src="https://cdnjs.cloudflare.com/ajax/libs/shaka-player/2.4.1/shaka-player.compiled.js"></script>

동영상을 표시할 video HTML 요소를 만드세요.

<video id="shaka" class="player" controls autoplay></video>

비디오 요소를 지정하는 Shaka 플레이어를 만들고 load 메서드를 호출합니다.

const playerElement = document.getElementById('shaka'); const player = new shaka.Player(playerElement); player.load(hlsUrl);
hls.js

hls.js 를 브라우저 스크립트로 가져오려면 다음과 같이 하십시오.

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>

동영상을 표시할 video HTML 요소를 만드세요.

<video id="hlsjs" class="player" controls autoplay></video>

hls.js 플레이어를 만들어 준 다음 HLS URL 재생하라고 지시하세요.

const playerElement = document.getElementById('hlsjs'); const player = new Hls(); player.loadSource(hlsUrl); player.attachMedia(playerElement); player.on(Hls.Events.MANIFEST_PARSED, function() { video.play(); });

HLS문제 해결

이 섹션에서는 Kinesis Video Streams와 함께 HTTP 라이브 스트리밍 (HLS) 을 사용할 때 발생할 수 있는 문제를 설명합니다.

HLS스트리밍 세션 검색은 URL 성공하지만 비디오 플레이어에서는 재생이 실패합니다.

를 URL 사용하여 HLS GetHLSStreamingSessionURL 스트리밍 세션을 성공적으로 검색할 수 있지만 를 비디오 플레이어에 제공할 때 URL 비디오가 재생되지 않는 경우 이 상황이 발생합니다.

이 상황을 해결하려면 다음과 같이 시도해 보십시오.

  • Kinesis Video Streams 콘솔에서 비디오 스트림을 재생할지 여부를 결정합니다. 콘솔에 표시되는 모든 오류를 고려합니다.

  • 조각 기간이 1초 미만이라면 1초로 늘립니다. 프래그먼트 지속 시간이 너무 짧으면 서비스가 비디오 프래그먼트를 너무 자주 요청하기 때문에 플레이어가 제한될 수 있습니다.

  • 각 HLS 스트리밍 세션을 한 명의 플레이어만 사용하고 URL 있는지 확인하십시오. 둘 이상의 플레이어가 단일 HLS 스트리밍 세션을 URL 사용하는 경우 서비스가 너무 많은 요청을 수신하여 이를 제한할 수 있습니다.

  • 플레이어가 HLS 스트리밍 세션에 지정하는 모든 옵션을 지원하는지 확인하십시오. 다음 파라미터 값을 다르게 조합하여 시도해 봅니다.

    • ContainerFormat

    • PlaybackMode

    • FragmentSelectorType

    • DiscontinuityMode

    • MaxMediaPlaylistFragmentResults

    일부 미디어 플레이어 (예HTML5: 모바일 플레이어) 는 일반적으로 f MP4 컨테이너 형식만 지원합니다HLS. 다른 미디어 플레이어 (예: Flash 및 사용자 지정 플레이어) MPEG 는 TS 컨테이너 형식만 지원할 HLS 수 있습니다. ContainerFormat파라미터를 시험해 보고 문제 해결을 시작하는 것이 좋습니다.

  • 각 조각의 트랙 수가 일정한지 확인합니다. 스트림의 프래그먼트가 오디오와 비디오 트랙을 둘 다 포함할지 아니면 비디오 트랙만 포함할지 여부를 결정하세요. 또한 각 트랙의 프래그먼트 간에 인코더 설정 (해상도 및 프레임 속도) 이 변경되지 않는지 확인하십시오.

생산자와 플레이어 사이에 지연 시간이 너무 김

이 상황은 비디오가 캡처되는 시점에서 비디오 플레이에서 재생되는 시점까지의 지연 시간이 너무 긴 경우입니다.

비디오는 HLS 프래그먼트별로 재생됩니다. 따라서 지연 시간은 조각 기간보다 짧을 수 없습니다. 또한 지속 시간에는 데이터 버퍼링 및 전송에 필요한 시간도 포함됩니다. 솔루션에 1초 미만의 지연 시간이 필요한 경우에는 를 대신 사용해 보십시오. GetMedia API

다음 파라미터를 조정하여 전체 지연 시간을 단축할 수 있습니다. 그러나 파라미터를 조정하면 비디오 품질이 저하되거나 재버퍼링 비율이 높아질 수도 있습니다.

  • 프래그먼트 지속 시간 - 프래그먼트 지속 시간은 비디오 인코더에서 생성되는 키프레임의 빈도에 의해 제어되는 스트림의 분할 간 비디오 양입니다. 권장되는 값은 1초입니다. 조각 기간이 짧으면 서비스에 비디오 데이터를 전송하기 전에 조각이 완료될 때까지 대기해야 하는 시간이 작아집니다. 또한 조각이 짧을수록 서비스 처리 속도가 빨라집니다. 그러나 조각 기간이 너무 짧을 경우 플레이어가 콘텐츠가 떨어져 재생을 멈추고 콘텐츠를 버퍼링할 가능성이 증가합니다. 조각 기간이 500밀리초 미만일 경우 생산자가 너무 많은 요청을 생성하여 서비스에서 스로틀링이 발생할 수 있습니다.

  • 비트 전송률 - 비트 전송률이 낮은 비디오 스트림은 읽기, 쓰기 및 전송하는 데 걸리는 시간이 더 짧습니다. 그러나 일반적으로 비디오 스트림의 비트레이트가 낮으면 비디오 품질도 떨어집니다.

  • 미디어 재생 목록의 프래그먼트 수 - 지연 시간에 민감한 플레이어는 미디어 재생 목록의 최신 프래그먼트만 로드해야 합니다. 대부분의 플레이어는 대신 가장 빠른 프래그먼트부터 시작합니다. 재생 목록의 프래그먼트 수를 줄이면 이전 프래그먼트와 새 프래그먼트 사이의 시간 간격을 줄일 수 있습니다. 재생 목록 크기가 작으면 재생 목록에 새 조각을 추가하는 데 지연이 발생하거나 플레이어가 업데이트된 재생 목록을 가져오는 데 지연이 발생하는 경우 재생 중에 프래그먼트를 건너뛸 수 있습니다. 3~5개의 프래그먼트를 사용하고 재생 목록에서 최신 프래그먼트만 로드하도록 구성된 플레이어를 사용하는 것이 좋습니다.

  • 플레이어 버퍼 크기 — 대부분의 비디오 플레이어에는 구성 가능한 최소 버퍼 지속 시간이 있으며, 일반적으로 기본값은 10초입니다. 지연 시간을 최소화하기 위해 이 값을 0초로 설정할 수 있습니다. 하지만 이렇게 하면 플레이어가 지연을 흡수할 버퍼가 없기 때문에 프래그먼트를 생성하는 데 지연이 발생하는 경우 플레이어가 다시 버퍼링하게 됩니다.

  • 플레이어 “catch up” — 비디오 플레이어는 일반적으로 버퍼가 가득 차면 비디오 버퍼 앞쪽까지 자동으로 재생되지 않습니다. 예를 들어 지연된 프래그먼트로 인해 프래그먼트의 백로그가 재생되는 경우입니다. 사용자 지정 플레이어는 프레임을 제거하거나 재생 속도를 높여(예: 1.1x) 버퍼의 앞부분까지 캐치업하여 이를 방지할 수 있습니다. 그러면 플레이어가 캐치업하는 과정에서 재생이 중간에 끊기거나 속도가 빨라질 수 있고, 버퍼 크기가 짧게 유지되면 재버퍼링이 더 빈번해질 수 있습니다.