투케이2K

64. (Aws/Amazon) [Aws Kinesis Video Streams] Aws KVS HLS 비디오 라이브 스트리밍 GetHLSStreamingSessionURL 정리 본문

Aws (Amazon)

64. (Aws/Amazon) [Aws Kinesis Video Streams] Aws KVS HLS 비디오 라이브 스트리밍 GetHLSStreamingSessionURL 정리

투케이2K 2025. 5. 19. 19:54

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services

- 기술 구분 : Aws / KVS / HLS / Stream / Video

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------

1. AWS KVS HLS 설명 : 

  >> HTTP 라이브 스트리밍으로 인터넷을 통해 소비자에게 미디어 콘텐츠를 제공하는 데 사용되는 스트리밍 프로토콜입니다

  >> HLS 는 Apple (iPhone, iPad 등) 에서 사용하는 표준 HTTP 기반 스트리밍 프로토콜 이며, 비디오 콘텐츠 스트리밍에 널리 사용되고 있습니다

    - HLS 는 Apple 장치에서 지원하는 유일한 형식입니다

  >> 미디어는 h.264 또는 h.265 인코딩된 비디오를 포함해야 하며 AAC 인코딩된 오디오는 선택해야합니다


2. HLS 동작 원리 : 

  >> 원시 입력 (카메라 = 비디오, 오디오) 을 가져와 미디어 전송 및 저장에 사용되는 압축된 스트림 생성

  >> 스트리밍 서버는 이 스트림을 일련의 작은 파일로 나눠 웹 서버에 배치

  >> 최종 사용자가 HLS 를 통해 웹 서버에 배치된 파일을 읽어 올바른 순서대로 스트림 재생 확인


3. Aws KVS HLS 를 통해 데이터를 제공 받기 위한 요구 사항 : 

  >> 데이터 보존 기간은 0보다 커야 합니다

  >> 각 조각의 비디오 트랙에는 H.264 형식의 AVC(Advanced Video Coding) 또는 H.265 형식의 HEVC 이어야합니다

  >> 각 조각의 오디오 트랙(있는 경우)에는 AAC 형식 이어야합니다


4. GetHLSStreamingSessionURL 설명 : 

  >> GetHLSStreamingSessionURL 는 HTTP 라이브 스트리밍(HLS) URL 을 가져올 수 있는 API 입니다

    - 사전) GetDataEndpoint 를 먼저 가져온 이후 해당 엔드포인트로 GetHLSStreamingSessionURL 요청을 진행합니다

  >> GetHLSStreamingSessionURL API 호출 시 StreamName 또는 StreamARN 지정이 필요합니다

  >> GetHLSStreamingSessionURL API 를 통해서 HLS 마스터 재생 목록에 대한 인증된 URL (암호화된 세션 토큰 포함) 을 확인할 수 있습니다


5. GetHLSStreamingSessionURL 요청 구문 : 

  POST /getHLSStreamingSessionURL HTTP/1.1
  Content-type: application/json

  {
    "ContainerFormat": "string",  
    "DiscontinuityMode": "string",
    "DisplayFragmentTimestamp": "string",
    "Expires": number,
    "HLSFragmentSelector": { 
        "FragmentSelectorType": "string",
        "TimestampRange": { 
          "EndTimestamp": number,
          "StartTimestamp": number
        }
    },
    "MaxMediaPlaylistFragmentResults": number,
    "PlaybackMode": "string",
    "StreamARN": "string",
    "StreamName": "string"
  }


  >> ContainerFormat : 컨테이너 형식 : 미디어 패키징에 사용할 형식을 지정 (기본 값 - FRAGMENTED_MP4)

  >> DiscontinuityMode : 불연속 모드 : 조각 사이의 불연속성을 표시하는 플래그가 미디어 재생 목록에 추가되는 시기를 지정 
  
    - ALWAYSALWAYS = HLS 미디어 재생 목록의 모든 프래그먼트 사이에 불연속성 마커가 배치
    - NEVERNEVER = 불연속성 마커가 어디에도 배치되지 않음
    - ON_DISCONTINUITY = 50밀리초 이상의 간격이나 중복이 있는 프래그먼트 사이에 불연속성 마커가 배치
  
  >> DisplayFragmentTimestamp : 디스플레이 프래그먼트 타임스탬프 : HLS 미디어 재생 목록에 프래그먼트 시작 타임스탬프를 언제 포함할지 지정합니다 (기본값 NEVER)

    - 유효한 값 : ALWAYS | NEVER

  >> Expires : 만료 : 요청된 세션이 만료될 때까지의 시간(초)입니다 (이 값은 300(5분)에서 43200(12시간) 사이입니다)

  >> HLSFragmentSelector : 요청된 조각의 시간 범위와 타임스탬프의 소스입니다

  >> MaxMediaPlaylistFragmentResults : HLS 미디어 재생 목록에 반환되는 조각의 최대 수입니다

  >> PlaybackMode : 재생 모드 : 라이브, 라이브 리플레이 또는 보관된 주문형 데이터를 검색할지 여부입니다

    - LIVE : HLS 미디어 재생 목록은 최신 조각이 제공되는 대로 지속적으로 업데이트됩니다
    - LIVE_REPLAY : LIVE 지정된 시작 시간의 조각을 포함하여 시작합니다 (예를 들어, 세션의 조각 길이가 2초이면 2초마다 새 조각이 미디어 재생 목록에 추가됩니다)
    - ON_DEMAND : HLS 미디어 재생 목록에는 세션의 모든 프래그먼트가 포함됩니다 (최대 지정된 개수까지)

  >> StreamARN : HLS 마스터 재생 목록 URL을 검색할 스트림의 Amazon 리소스 이름(ARN)입니다

  >> StreamName : HLS 마스터 재생 목록 URL을 검색할 스트림의 이름입니다


6. GetHLSStreamingSessionURL 응답 구문 : 

  HTTP/1.1 200
  Content-type: application/json

  {
    "HLSStreamingSessionURL": "string"
  }

  >> HLSStreamingSessionURL : 미디어 플레이어가 HLS 마스터 재생 목록을 검색하는 데 사용할 수 있는 URL (세션 토큰 포함) 입니다


7. GetHLSStreamingSessionURL 에러 발생 정리 : 

  >> ClientLimitExceededException : 한도를 초과하여 Kinesis Video Streams에서 요청을 제한했습니다

  >> InvalidArgumentException : 지정된 매개변수가 제한을 초과했거나, 지원되지 않거나, 사용할 수 없습니다

  >> InvalidCodecPrivateDataException : 비디오 스트림의 트랙 중 적어도 하나에 있는 코덱 개인 데이터가 이 작업에 유효하지 않습니다

  >> MissingCodecPrivateDataException : 비디오 스트림의 트랙 중 하나 이상에서 코덱 개인 데이터가 발견되지 않았습니다

  >> NoDataRetentionException : 데이터를 보관하지 않는 스트림(즉, DataRetentionInHours0이 있는 스트림)에 대해 요청되었습니다

  >> NotAuthorizedException : 주어진 스트림에서 작업을 수행할 권한이 없거나 토큰이 만료되었습니다

  >> ResourceNotFoundException : Kinesis Video Streams에서 지정한 스트림을 찾을 수 없는 경우 이 오류가 발생합니다

  >> UnsupportedStreamMediaTypeException : 재생 세션의 첫 번째 조각에 있는 트랙의 코덱 ID에서 미디어 유형(예: h.264 또는 h.265 비디오, AAC 또는 G.711 오디오)을 확인할 수 없습니다

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]

// --------------------------------------------------------------------------------------

[Aws GetHLSStreamingSessionURL 설명]

https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetHLSStreamingSessionURL.html


[Aws KVS 비디오 스트림 , 신호 전송 채널 차이점 설명 정리]

https://blog.naver.com/kkh0977/223854439046


[Aws Kvs HSL 비디오 스트림 녹화 영상 관련 학습 정리]

https://blog.naver.com/kkh0977/223855980812


[Aws KVS 비디오 스트림 및 신호 전송 채널 목록 확인 방법]

https://blog.naver.com/kkh0977/223864512412


[Aws STS 임시 보안 자격 증명 설명 정리]

https://blog.naver.com/kkh0977/223846461194


[Advanced Video Coding(H.264) 설명]

https://www.cloudflare.com/ko-kr/learning/video/what-is-h264-avc/

// --------------------------------------------------------------------------------------
 
반응형
Comments