투케이2K

187. (TWOK/LOGIC) [Aws] AWS Kvs HLS 사용해 실시간 비디오 스트리밍 재생 및 앱 입장에서 S3 녹화 영상 업로드 로직 정리 본문

투케이2K 로직정리

187. (TWOK/LOGIC) [Aws] AWS Kvs HLS 사용해 실시간 비디오 스트리밍 재생 및 앱 입장에서 S3 녹화 영상 업로드 로직 정리

투케이2K 2026. 5. 13. 20:39
728x90
반응형

[로직 정리]

정리 로직 : AWS / Kvs / HLS

제 목 : [Aws] AWS Kvs HLS 사용해 실시간 비디오 스트리밍 재생 및 앱 입장에서 S3 녹화 영상 업로드 로직 정리

 

[설 명]

// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

1. 제 목 : [Aws] AWS Kvs HLS 사용해 실시간 비디오 스트리밍 재생 및 앱 입장에서 S3 녹화 영상 업로드 로직 정리


2. 테스트 환경 : Aws / Kvs / HLS / S3


3. 사전) 👉 비디오 스트림 간략 설명 정리 : 

  >> 비디오 스트림은 라이브 비디오 및 기타 시간이 인코딩된 데이터를 캡처하고, 선택적으로 저장하고, 실시간, 배치 혹은 애드혹 형식으로 데이터의 소비를 가능하게 할 수 있도록 해 주는 리소스입니다

  >> 일반적인 구성에서는 Kinesis 비디오 스트림은 데이터를 푸시해 주는 생산자가 하나만 있습니다 (실시간 스트리밍 데이터를 밀어 넣어주는 하드웨어 기기)


4. 사전) 👉 HLS 개념 설명 : 

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

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

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

  >> 미디어 타입 유효한 값의 예로는 "video/h264" 및 "video/h264,audio/aac" 가 있습니다

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






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

✅ 사전) 실시간 영상 재생 시 사용 되는 WebRTC 와 HLS 비교 설명 정리

--------------------------------------------------------------
구분          |     WebRTC         |      HLS
--------------------------------------------------------------
핵심 목적     |  초저지연 실시간     | 안정적 스트리밍 & 재생
--------------------------------------------------------------
지연          |     0.3~1초        | 5~30초
--------------------------------------------------------------
대상          | 실시간 상호작용     | 다수 시청, 기록, 재생
--------------------------------------------------------------
네트워크      |    P2P / UDP       | HTTP / CDN
--------------------------------------------------------------
확장성        | 낮음 (연결 수 제한) | ✅ 매우 높음
--------------------------------------------------------------
녹화/보관     |    ❌ 직접 불가    | ✅ 자연스럽게 연계
--------------------------------------------------------------



✅ 흐름 정리) 디바이스 기기 HLS 라이브 스트리밍 재생 및 앱에서 영상 시청 및 녹화 동작 흐름 정리

1. 기기: PutMedia : 스트리밍 데이터 전송 수행

2. 앱: HLS 재생 (보기만)

3. 앱: “녹화 시작” 버튼

4. Backend: 서버 타임스탬프 기록

5. 앱: “녹화 종료”

6. Backend:
   - 시간 범위 계산
   - ListFragments
   - GetMediaForFragmentList / GetClip
   - S3 저장



✅ 세부 정리) 각 흐름 단계에서 세부 사항 정리

1. 기기: PutMedia : 스트리밍 데이터 전송 수행

  >> 기기는 영상 원본을 KVS로 지속적으로 푸시

  >> Stream retention 반드시 > 0 : 최소 1시간 (실무에선 24h~72h 흔함)

  >> Fragment duration : 보통 2~6초 : 나중에 “구간 자르기” 정확도에 영향

2. 앱: HLS 재생 (보기만)

  >> 사용자는 실시간 또는 약간 지연된 영상 시청

  >> 앱은 GetHLSStreamingSessionURL로 m3u8 URL 획득

  >> 실제 영상은 KVS 내부 fragment를 읽어서 제공

3. 앱: “녹화 시작” 버튼

  >> 백엔드에 API 호출 : 이 시점부터의 시간을 기록해라

4. Backend: 서버 타임스탬프 기록

  >> 백엔드는 녹화 요청이 들어온 타임 스탬프 값 시간을 저장

5. 앱: “녹화 종료”

  >> 백엔드에 API 호출 : 녹화 영상 종료 시간을 기록해라

6-1. Backend: 시간 범위 계산

  >> 녹화 시작 타임스탬프, 녹화 종료 타임스탬프 확인

6-2. GetClip vs GetMediaForFragmentList 선택

  >> 👉 GetClip (가장 간단)

    - 쓰임 : 사용자 버튼 녹화 , 수 초 ~ 수 분 , “파일 하나면 충분”

        $ 안정적으로 쓰이는 범위 : 수 초 ~ 수 분 , 일반적으로 1~5분 , 길어도 10분 전후

    - 동작 : 

      TimestampRange
        → KVS가 자동으로 fragment 선택
        → MP4 파일 생성
        → 스트리밍 응답

    - 장점 : 구현 쉬움 , 추가 처리 거의 없음

    - 단점 : 대용량 부적합 , 세밀한 제어 불가

  >> 👉 ListFragments + GetMediaForFragmentList (정석)

    - 쓰임 : 자동 녹화 , 장시간 , 분석 / 후처리 필요 , 대규모 시스템

    - 동작 : 

      TimestampRange
        → ListFragments (fragment 번호 목록)
        → GetMediaForFragmentList (MKV payload)
        → (필요시 변환)
        → S3

    - 장점 : 제어력 100% , 확장성 좋음

    - 단점 : 구현 복잡 , 후처리 필요

6-3. S3 저장

  >> 저장 형태 : 
  
    - GetClip → MP4 바로 업로드
    - Fragment 방식 → 변환 후 MP4 / 그대로 MKV

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






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

▶️ 143. (TWOK/LOGIC) [android] Aws Kvs HLS PutMedia 스트리밍 동영상 업로드 로직 정리 - DataEndpoint, MKV , AWS4Signer

https://kkh0977.tistory.com/8013

https://blog.naver.com/kkh0977/223875616765?trackingCode=blog_bloghome_searchlist


▶️ 145. (TWOK/LOGIC) [Aws] Aws Kvs HLS 디바이스 카메라 라이브 스트리밍 정보 PutMedia 업로드 방법 로직 정리

https://kkh0977.tistory.com/8086

https://blog.naver.com/kkh0977/223911555706?trackingCode=blog_bloghome_searchlist


▶️ 146. (TWOK/LOGIC) [Aws] Kvs HLS 라이브 스트리밍 로컬 PC에서 업로드 하기 위한 프로세스 로직 정리 - aws , ffmpeg , gstreamer 사용

https://kkh0977.tistory.com/8099

https://blog.naver.com/kkh0977/223918332596?trackingCode=blog_bloghome_searchlist


▶️ 147. (TWOK/LOGIC) [android] 안드로이드 휴대폰 실시간 카메라 스트림 영상을 마스터 역할로 Aws Kvs HLS 라이브 스트리밍 업로드 로직 정리

https://kkh0977.tistory.com/8250

https://blog.naver.com/kkh0977/223996783911?trackingCode=blog_bloghome_searchlist


▶️ 153. (TWOK/LOGIC) [Aws] 자바스크립트 Aws Kvs HLS 비디오 라이브 스트리밍 뷰어 Viewer 영상 재생 방법 정리

https://kkh0977.tistory.com/8405

https://blog.naver.com/kkh0977/224079078341?trackingCode=blog_bloghome_searchlist


▶️ AWS : ListFragments 설명

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


▶️ AWS : GetMediaForFragmentList 설명

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


▶️ AWS : GetClip 설명

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

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments