Amazon S3에 자동 레코딩(저지연 스트리밍) - Amazon Interactive Video Service

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

Amazon S3에 자동 레코딩(저지연 스트리밍)

이 섹션에서는 Amazon IVS 저지연 auto-record-to 스트리밍의 -S3 기능에 대한 정보를 제공합니다. 레코딩된 Amazon IVS 스트림을 위한 데이터 스토리지 뿐만 아니라 스토리지 콘텐츠와 메타데이터 파일 스키마에 대한 정보도 제공하고 있습니다. 또한 레코딩된 콘텐츠 재생에 대한 정보도 아래에서 확인하실 수 있습니다.

세부 정보를 볼 항목 ... 참조할 섹션...

비디오 레코딩 설정 및 중지

Amazon IVS 시작하기선택적 레코딩을 사용하여 채널 생성

API

IVS API 참조

비용 Amazon IVS 비용

S3Prefix

S3 접두사는 레코딩되는 각 라이브 스트림에 대한 고유한 디렉터리 구조입니다. 라이브 스트림의 모든 미디어 및 메타데이터 파일은 이 디렉터리 안에 기록됩니다. 녹화가 활성화된 채널의 경우 라이브 세션이 시작될 때 S3 접두사가 생성되고 녹화 시작 및 종료 시 CloudWatch 이벤트에 제공됩니다.

S3 접두사의 형식은 다음과 같습니다.

/ivs/v1/<aws_account_id>/<channel_id>/<year>/<month>/<day>/<hours>/<minutes>/<recording_id>

위치:

  • aws_account_id는 AWS 계정 ID(AWS 계정을 만들 때 생성됨), 여기에서 채널이 생성됩니다.

  • channel_id는 채널 ARN 의 리소스 ID 부분(Amazon 리소스 이름의 마지막 부분)입니다. 용어집에서 ARN을 참조하세요.

  • <year>/<month>/<day>/<hours>/<minutes>는 레코딩이 시작될 때 UTC 타임스탬프입니다.

  • recording_id는 각 레코딩 세션에 대해 생성된 고유 ID입니다.

예:

ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs

레코딩 콘텐츠

레코딩이 시작되면 비디오 세그먼트 및 메타데이터 파일이 채널에 대해 구성된 S3 버킷에 기록됩니다. 이러한 콘텐츠는 온디맨드 비디오로 후처리 또는 재생에 사용할 수 있습니다.

참고로 라이브 스트림이 시작되고 Recording Start EventBridge 이벤트가 발생한 후 매니페스트 파일과 비디오 세그먼트가 기록되기까지 시간이 조금 걸립니다. 레코딩 종료 이벤트가 전송된 후에만 레코딩된 스트림을 재생하거나 처리하는 것이 좋습니다. ( EventBridge IVS와 함께 아마존 사용하기 섹션을 참조하세요.)

다음은 라이브 Amazon IVS 세션 레코딩의 샘플 디렉터리 구조 및 콘텐츠입니다.

ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs/ events recording-started.json recording-ended.json media hls thumbnails

events 폴더에는 레코딩 이벤트에 해당하는 메타데이터 파일이 들어 있습니다. JSON 메타데이터 파일은 레코딩이 시작되거나, 성공적으로 종료되거나, 실패로 종료될 때 생성됩니다.

  • events/recording-started.json

  • events/recording-ended.json

  • events/recording-failed.json

지정된 events 폴더에는 recording-started.jsonrecording-ended.json 또는 recording-failed.json이 포함됩니다.

여기에는 레코딩된 세션 및 출력 형식과 관련된 메타데이터가 포함됩니다. 다음은 JSON 세부 정보입니다.

media 폴더에는 지원되는 모든 미디어 콘텐츠가 다음 두 개의 하위 폴더에 포함되어 있습니다.

  • hls에는 라이브 세션 중에 생성된 모든 미디어 및 매니페스트 파일이 포함되어 있으며, 이는 Amazon IVS 플레이어에서 재생할 수 있습니다. 이 폴더에는 표준 마스터 매니페스트 master.m3u8와 바이트 범위 지원 매니페스트 byte-range-multivariant.m3u8라는 두 가지 종류의 HLS 매니페스트가 있습니다. 따라서 각 변환 폴더에는 playlist.m3u8 파일과 byte-range-variant.m3u8 파일이 모두 있습니다. (아래의 바이트 범위 재생 목록을 참조하세요.)

  • thumbnails에는 라이브 세션 중에 생성된 썸네일 이미지가 들어 있습니다. 썸네일은 생성되어 1분마다 버킷에 기록됩니다. (이 동작을 변경하려면 레코딩 구성의 thumbnailConfiguration 속성을 재정의합니다.)

중요: media 폴더의 콘텐츠는 처음 수신된 비디오 세그먼트의 특성에 따라 동적으로 생성 및 결정됩니다. 폴더 콘텐츠가 최종 특성(예: 변환 품질)을 나타내지 않을 수도 있습니다. 정적 경로(static path)에 대해 가정하는 것은 자제하시기 바랍니다. 사용 가능한 HLS 변환과 해당 경로를 검색하려면 아래에 설명된 JSON 메타데이터 파일을 사용합니다.

바이트 범위 재생 목록

auto-record-to-S3 기능은 표준 HLS 재생 목록 외에도 바이트 범위 재생 목록 생성을 지원합니다. 바이트 범위 재생 목록은 HLS 사양 버전 4를 준수합니다. 이를 통해 콘텐츠를 더욱 세밀하게 클리핑할 수 있습니다. 바이트 범위 재생 목록에서는 변환 인덱스 파일의 각 세그먼트가 비디오 청크의 바이트 하위 범위를 참조하므로 표준 10초 미디어 파일 크기보다 더 세분화됩니다. 바이트 범위 재생 목록의 경우 세그먼트 지속 시간은 스트림에 구성된 키프레임 간격과 동일합니다.

썸네일

레코딩 구성의 thumbnailConfiguration 속성을 사용하면 라이브 세션에 대한 썸네일 레코딩을 활성화 또는 비활성화하고 라이브 세션에 대해 썸네일이 생성되는 간격을 수정할 수 있습니다. 썸네일 간격은 1초에서 60초 사이일 수 있습니다. 기본적으로 썸네일 레코딩은 60초 간격으로 활성화됩니다. 자세한 내용은 Amazon IVS API 레퍼런스를 참조하세요.

또한 썸네일 구성에 storage 필드(SEQUENTIAL 및/또는 LATEST)와 해상도(LOWEST_RESOLUTION, SD, HD 또는 FULL_HD)가 포함될 수 있습니다. 다음은 각 옵션의 해상도입니다.

160 <= LOWEST_RESOLUTION <= 360

360 < SD <= 480

480 < HD <= 720

720 < FULL_HD <= 1,080

조각화된 스트림 병합

레코딩 구성의 recordingReconnectWindowSeconds 속성을 통해 스트림이 중단되고 새 스트림이 시작되는 경우 Amazon IVS가 이전 스트림과 동일한 S3 접두사에 레코딩을 시도하는 기간(초)을 지정할 수 있습니다. 즉, 지정된 간격 내에 브로드캐스트의 연결이 끊어졌다가 다시 연결되면 여러 스트림이 단일 브로드캐스트로 간주되어 병합됩니다.

Amazon의 IVS 녹화 상태 변경 이벤트 EventBridge: Amazon IVS는 새 스트림이 시작되지 않도록 recordingReconnectWindowSeconds 대기하므로 녹화 종료 이벤트 및 녹화가 종료된 JSON 메타데이터 파일은 최소한 지연됩니다.

스트림 병합 기능 설정에 관한 지침은 Amazon IVS 시작하기에서 4단계: 선택적 레코딩을 사용하여 채널 생성의 내용을 참조하세요.

자격

여러 스트림을 동일한 S3 접두사에 레코딩하려면 모든 스트림에 대해 특정 조건이 충족되어야 합니다.

  • 동영상 너비와 높이가 같아야 합니다.

  • 프레임 속도가 같아야 합니다.

  • 후속 스트림의 비트 전송률 차이는 원본 스트림 비트 전송률의 50%이하여야 합니다.

  • 비디오 코덱과 오디오 코덱이 동일해야 합니다.

참고:

  • 최대 20개의 스트림이 병합된 후에는 새 S3 접두사가 생성됩니다.

  • 48시간 후에는 새 S3 접두사가 생성됩니다. 예를 들어 첫 번째 브로드캐스트가 48시간 동안 지속되고 recordingReconnectWindowSeconds 간격 내에 다른 브로드캐스트가 시작되는 경우, 다음 브로드캐스트는 첫 번째 S3 접두사에 병합되지 않습니다.

  • 각 스트림은 이전 스트림보다 10초 이상 늦게 시작해야 합니다.

알려진 문제

recordingReconnectWindowSeconds가 활성화되고 웹 브로드캐스트 SDK가 사용되는 경우 웹 브로드캐스트 SDK가 비트레이트 품질을 동적으로 변경하기 때문에 동일한 S3 접두사에 레코딩되지 않을 수 있습니다.

JSON 메타데이터 파일

기록 상태 변경 이벤트가 발생하면 해당 Amazon CloudWatch 지표가 생성되고 S3 접두사 내에 메타데이터 파일이 작성됩니다. (Amazon IVS 저지연 스트리밍 모니터링을 참조하세요.)

이 메타데이터는 JSON 형식입니다. 이는 다음 정보로 구성됩니다.

필드 유형 필수 설명

channel_arn

문자열 라이브 스트림을 브로드캐스팅하는 채널의 ARN입니다.

media

객체

이 레코딩에 사용할 수 있는 미디어 콘텐츠의 열거된 객체를 포함하는 객체입니다. 유효한 값: "hls", "thumbnails".

  • hls

객체

Apple HLS 형식 출력을 설명하는 열거형 필드입니다.

    • duration_ms

정수 조건

레코딩된 HLS 콘텐츠의 지속 시간(밀리초)입니다. 이는 recording_status"RECORDING_ENDED" 또는 "RECORDING_ENDED_WITH_FAILURE"인 경우에만 사용할 수 있습니다. 레코딩이 완료되기 전에 실패한 경우 이 값은 0입니다.

    • path

문자열

HLS 콘텐츠가 저장되는 S3 접두사의 상대 경로입니다.

    • playlist

문자열

HLS 마스터 재생 목록 파일의 이름입니다.

    • byte_range_playlist

문자열

HLS 바이트 범위 다변량 재생 목록의 이름입니다.

    • renditions

객체

메타데이터 객체의 변환 배열(HLS 변형)입니다. 항상 하나 이상의 변환이 있습니다.

      • path

문자열

이 변환에 대해 HLS 콘텐츠가 저장되는 S3 접두사의 상대 경로입니다.

      • playlist

문자열

이 변환에 대한 미디어 재생 목록 파일의 이름입니다.

      • byte_range_playlist

문자열

이 변환에 대한 바이트 범위 재생 목록의 이름입니다.

      • resolution_height

int 조건

인코딩된 비디오의 해상도 높이(픽셀)입니다. 이는 변환에 비디오 트랙이 포함된 경우에만 사용할 수 있습니다.

      • resolution_width

int 조건

인코딩된 비디오의 해상도 폭(픽셀)입니다. 이는 변환에 비디오 트랙이 포함된 경우에만 사용할 수 있습니다.

  • thumbnails

객체 조건

썸네일 출력을 설명하는 열거형 필드입니다. 이는 썸네일 구성의 recordingModeINTERVAL인 경우에만 사용할 수 있습니다.

    • path

문자열 조건

썸네일 콘텐츠가 저장되는 S3 접두사의 상대 경로입니다. 이는 썸네일 구성의 recordingModeINTERVAL인 경우에만 사용할 수 있습니다.

    • resolution_height

int

썸네일의 높이입니다. 기본값: 소스 변환의 해상도. 이 값은 관련 레코딩 구성의 사용자 입력, 특히 thumbnailConfiguration.resolution  값의 영향을 받습니다.

    • resolution_width

int

썸네일의 너비입니다. 기본값: 소스 변환의 해상도. 이 값은 관련 레코딩 구성의 사용자 입력, 특히 thumbnailConfiguration.resolution 값의 영향을 받습니다.

  • latest thumbnail

객체

최신 썸네일 출력을 설명하는 열거형 필드입니다. 이는 썸네일 구성의 storageLATEST를 포함하는 경우에만 사용할 수 있습니다.

    • resolution_height

int

썸네일의 높이입니다. 기본값은 소스 변환의 해상도일 것입니다. 이 값은 관련 레코딩 구성의 사용자 입력, 특히 thumbnailConfiguration.resolution 값의 영향을 받습니다.

    • resolution_width

int

썸네일의 너비입니다. 기본값은 소스 변환의 해상도일 것입니다. 이 값은 관련 레코딩 구성의 사용자 입력, 특히 thumbnailConfiguration.resolution 값의 영향을 받습니다.

recording_ended_at

문자열 조건

레코딩이 종료된 RFC 3339 UTC 타임스탬프입니다. 이는 recording_status"RECORDING_ENDED" 또는 "RECORDING_ENDED_WITH_FAILURE"인 경우에만 사용할 수 있습니다.

recording_started_atrecording_ended_at은 이러한 이벤트가 생성될 때의 타임스탬프이며 HLS 비디오 세그먼트 타임스탬프와 정확히 일치하지 않을 수 있습니다. 레코딩 지속 시간을 정확하게 파악하려면 duration_ms 필드를 사용하세요.

recording_started_at

문자열

레코딩이 시작된 RFC 3339 UTC 타임스탬프입니다.

recording_ended_at에 대한 위의 참고 사항을 참조하세요.

recording_status

문자열

레코딩 상태입니다. 유효한 값: "RECORDING_STARTED", "RECORDING_ENDED", "RECORDING_ENDED_WITH_FAILURE".

recording_status_message

문자열 조건

상태에 대한 설명 정보입니다. 이는 recording_status"RECORDING_ENDED" 또는 "RECORDING_ENDED_WITH_FAILURE"인 경우에만 사용할 수 있습니다.

version

문자열

메타데이터 스키마의 버전입니다.

예: recording_started.json

{ "version" : "v1", "channel_arn" : "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj", "recording_started_at" : "2020-06-12T12:53:26Z", "recording_status : "RECORDING_STARTED", "media" : { "hls" : { "path" : "media/hls", "playlist" : "master.m3u8", "byte_range_playlist": "byte-range-multivariant.m3u8", "renditions" : [ { "path" : "480p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 480, "resolution_width" : 852 }, { "path" : "360p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 360, "resolution_width" : 640 }, { "path" : "160p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 160, "resolution_width" : 284 }, { "path" : "720p60", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 720, "resolution_width" : 1280 } ] }, "thumbnails": { "path": "media/thumbnails", "resolution_height": 480, "resolution_width": 852 }, "latest_thumbnail": { "path": "media/latest_thumbnail/thumb.jpg", "resolution_height": 480, "resolution_width": 852 } } }

예: recording_ended.json

{ "version" : "v1", "channel_arn" : "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj", "recording_ended_at" : "2020-06-14T12:53:20Z", "recording_started_at" : "2020-06-12T12:53:26Z", "recording_status" : "RECORDING_ENDED", "media" : { "hls" : { "duration_ms" : 172794489, "path" : "media/hls", "playlist" : "master.m3u8", "byte_range_playlist": "byte-range-multivariant.m3u8", "renditions" : [ { "path" : "480p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 480, "resolution_width" : 852 }, { "path" : "360p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 360, "resolution_width" : 640 }, { "path" : "160p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 160, "resolution_width" : 284 }, { "path" : "720p60", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 720, "resolution_width" : 1280 } ] }, "thumbnails": { "path": "media/thumbnails", "resolution_height": 480, "resolution_width": 852 }, "latest_thumbnail": { "path": "media/latest_thumbnail/thumb.jpg", "resolution_height": 480, "resolution_width": 852 } } }

예: recording_failed.json

{ "version" : "v1", "channel_arn" : "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj", "recording_ended_at" : "2020-06-14T12:53:20Z", "recording_started_at" : "2020-06-12T12:53:26Z", "recording_status" : "RECORDING_ENDED", "media" : { "hls" : { "duration_ms" : 172794489, "path" : "media/hls", "playlist" : "master.m3u8", "byte_range_playlist": "byte-range-multivariant.m3u8", "renditions" : [ { "path" : "480p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 480, "resolution_width" : 852 }, { "path" : "360p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 360, "resolution_width" : 640 }, { "path" : "160p30", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 160, "resolution_width" : 284 }, { "path" : "720p60", "playlist" : "playlist.m3u8", "byte_range_playlist": "byte-range-variant.m3u8", "resolution_height" : 720, "resolution_width" : 1280 } ] }, "thumbnails": { "path": "media/thumbnails", "resolution_height": 480, "resolution_width": 852 }, "latest_thumbnail": { "path": "media/latest_thumbnail/thumb.jpg", "resolution_height": 480, "resolution_width": 852 } } }

레코딩의 변환 검색

Amazon IVS 채널로 콘텐츠를 스트리밍할 때 auto-record-to-s 3은 소스 비디오를 사용하여 여러 렌디션을 생성합니다. Amazon IVS 플레이어는 가변 비트 전송률(Adaptive Bitrate Streaming, ABR)을 사용하여 필요에 따라 다양한 네트워크 조건에 맞게 재생을 최적화하기 위해 자동으로 변환(비트 전송률)을 전환합니다.

라이브 스트리밍 중에 생성된 각 변환은 S3 레코딩 접두사 안의 고유한 경로에 레코딩됩니다. 해상도 세부 정보, 경로 및 재생 목록 파일 이름은 레코딩의 시작 및 종료 중에 JSON 메타데이터 파일에 저장됩니다. 레코딩 구성의 renditionSelection 값이 ALL이면 모든 변환이 기록을 위해 선택됩니다. renditionSelection이 CUSTOM인 경우 사용자는 LOWEST_RESOLUTION, SD, HD 및 FULL_HD 옵션 중 하나 이상을 선택해야 합니다. 다음은 각 옵션의 해상도입니다.

160 <= LOWEST_RESOLUTION <= 360

360 < SD <= 480

480 < HD <= 720

720 < FULL_HD <= 1,080

중요: 정적 변환 경로 또는 생성된 변환 목록에 대해 가정하지 않습니다. 이는 변경될 수 있기 때문입니다. Amazon IVS 레코딩에 대해 특정 변환을 항상 사용할 수 있다고 가정하지 않습니다. 사용 가능한 변환, 해상도 및 경로를 확인하려면 메타데이터 파일을 참조하세요.

레코딩 접두사 안의 event/recording_started.json 또는 event/recording_ended.json 파일에는 레코딩 접두사 안에 있는 미디어 파일의 경로와 이름이 포함됩니다. 모든 path 요소는 계층의 이전 경로에 상대적입니다. media > hls 아래 요소는 이 레벨에서 정의된 마스터 재생 목록 이름과 경로와 함께 HLS 자산을 설명합니다.

다음은 S3 레코딩 접두사와 메타데이터 파일을 사용하여 마스터 재생 목록 경로를 생성하는 방법을 보여주는 Python 코드 조각입니다.

def get_master_playlist(metadata_json, s3_recording_prefix): return s3_recording_prefix + '/' + metadata_json['media']['hls']['path'] + '/' + metadata_json['media']['hls']['playlist']

media > hls > renditions 아래 요소는 레코딩된 변환 목록을 설명합니다. resolution_heightresolution_width 속성을 사용하여 비디오 해상도를 식별할 수 있습니다. pathplaylist 요소를 사용하여 변환 재생 목록 경로를 파생시킬 수 있습니다. 이 필드를 사용하여 후처리에 사용할 변환을 결정합니다.

레코딩에 사용할 수 있는 가장 높은 렌디션 재생 목록을 찾으려면 “IVS 레코딩 상태 변경” 이벤트를 구독하면 됩니다. EventBridge ( EventBridge IVS와 함께 아마존 사용하기를 참조하세요.) 다음은 해당 이벤트에 구독된 Lambda 함수를 사용하는 방법을 보여주는 샘플 Python 스크립트입니다.

import json import boto3 s3 = boto3.resource('s3') def get_highest_rendition_playlist(bucket_name, prefix_name): object_path = "{}/events/recording-started.json".format(prefix_name) object = s3.Object(bucket_name, object_path) body = str(object.get()['Body'].read().decode('utf-8')) metadata = json.loads(body) media_path = metadata["media"]["hls"]["path"] renditions = metadata["media"]["hls"]["renditions"] highest_rendition = None highest_rendition_size = 0 for rendition in renditions: current_rendition_size = rendition["resolution_height"] if (current_rendition_size > highest_rendition_size): highest_rendition_size = current_rendition_size highest_rendition = rendition highest_rendition_playlist = media_path + '/' + highest_rendition['path'] + '/' + highest_rendition['playlist'] return highest_rendition_playlist def lambda_handler(event, context): prefix_name = event["detail"]["recording_s3_key_prefix"] bucket_name = event["detail"]["recording_s3_bucket_name"] rendition_playlist = get_highest_rendition_playlist(bucket_name, prefix_name) print("Highest rendition playlist: {}/{}".format(prefix_name, rendition_playlist)) return { 'statusCode': 200, 'body': rendition_playlist }

프라이빗 버킷에서 레코딩된 콘텐츠 재생

Amazon S3에 자동 레코딩 기능으로 레코딩된 객체는 기본적으로 프라이빗이므로 직접 S3 URL을 사용하여 재생할 수 없습니다. Amazon IVS 플레이어나 다른 플레이어를 사용하여 재생할 HLS 마스터 매니페스트(m3u8 파일)를 열려고 하면 오류가 발생합니다(예: “요청한 리소스에 액세스할 수 있는 권한이 없습니다”). 대신 Amazon CloudFront CDN (콘텐츠 전송 네트워크) 을 사용하여 이러한 파일을 재생할 수 있습니다.

아마존 CloudFront 디스트리뷰션

CloudFront 프라이빗 버킷의 콘텐츠를 제공하도록 배포를 구성할 수 있습니다. 일반적으로 이 방법은 에서 제공하는 제어를 우회하여 읽을 수 있는 공개적으로 액세스할 수 있는 버킷을 사용하는 것보다 좋습니다. CloudFront 프라이빗 오리진 버킷에 대한 읽기 권한을 가진 특수 CloudFront 사용자인 OAC (Origin Access Control) 를 생성하여 프라이빗 버킷에서 서비스하도록 배포를 설정할 수 있습니다. 배포를 생성한 후 CloudFront 콘솔이나 API를 통해 OAC를 생성할 수 있습니다. 새로운 오리진 액세스 제어 생성을 참조하세요.

아마존에서 재생 CloudFront

OAC를 사용하여 프라이빗 버킷에 액세스할 수 있도록 배포를 설정한 후에는 CloudFront URL을 통해 동영상 파일을 사용할 수 있어야 합니다. CloudFront URL은 AWS CloudFront 콘솔의 세부 정보 탭에 있는 배포 도메인 이름입니다. 이 키는 다음과 같은 형식입니다.

a1b23cdef4ghij.cloudfront.net.

배포를 통해 레코딩된 비디오를 스트리밍하려면 master.m3u8 파일의 객체 키를 찾습니다. 이 키는 다음과 같은 형식입니다.

ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8

CloudFront URL 끝에 객체 키를 추가합니다. 최종 URL은 다음과 같습니다.

https://a1b23cdef4ghij.cloudfront.net/ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8

웹 브라우저에서 재생하려면 S3 버킷 CloudFront 모두에 CORS를 구성해야 합니다. CloudFront 구성하려면 원본 요청 정책 생성의 지침에 따라 CORS-S3 원본 요청 정책 및 SimpleCors 응답 헤더 정책을 배포에 첨부하십시오. CloudFront 아래 예제 구성 콘솔 페이지를 참조하세요.

예제 구성 콘솔 페이지. 캐시 정책과 오리진 요청 정책을 사용하여 캐시 키와 오리진 요청을 제어하는 것이 좋습니다.

S3 CORS 구성의 경우 CORS 구성을 참조하여 S3 버킷에 대한 적절한 규칙을 생성하세요.

이제 버킷에서 직접 재생하는 것처럼 레코딩된 비디오를 재생할 수 있습니다.

자세한 내용은 Amazon S3 오리진에 대한 액세스 제한을 참조하세요.