Notice
Recent Posts
Recent Comments
Link
투케이2K
109. (Aws/Amazon) [Aws Kinesis Video Streams] Aws KVS HLS 옵션 지정 PlaybackMode 재생 모드 종류 정리 본문
Aws (Amazon)
109. (Aws/Amazon) [Aws Kinesis Video Streams] Aws KVS HLS 옵션 지정 PlaybackMode 재생 모드 종류 정리
투케이2K 2025. 9. 6. 10:29728x90
[개발 환경 설정]
개발 환경 : Aws / Amazon Web Services

[설명 정리]
// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------
- 인프라 : Aws / Amazon Web Services
- 기술 구분 : Aws / Aws Kinesis Video Streams / HLS / PlaybackMode
- 사전) 비디오 스트림 설명 :
>> 비디오 스트림은 라이브 비디오 및 기타 시간이 인코딩된 데이터를 캡처하고, 선택적으로 저장하고, 실시간, 배치 혹은 애드혹 형식으로 데이터의 소비를 가능하게 할 수 있도록 해 주는 리소스입니다
>> 일반적인 구성에서는 Kinesis 비디오 스트림은 데이터를 푸시해 주는 생산자가 하나만 있습니다 (실시간 스트리밍 데이터를 밀어 넣어주는 하드웨어 기기)
- 사전) KVS 개념 설명 :
>> KVS 는 ML (기계 학습), 재생 및 기타 처리를 위해 커넥티드 디바이스에서 AWS로 비디오를 쉽고 안전하게 스트리밍할 수 있는 기술입니다
- 사전) HLS 개념 설명 :
>> HTTP 라이브 스트리밍으로 인터넷을 통해 소비자에게 미디어 콘텐츠를 제공하는 데 사용되는 스트리밍 프로토콜입니다
>> HLS 는 Apple 장치에서 지원하는 유일한 형식입니다
>> 미디어는 h.264 또는 h.265 인코딩된 비디오를 포함해야 하며 AAC 인코딩된 오디오는 선택 사항입니다
>> 미디어 타입 유효한 값의 예로는 "video/h264" 및 "video/h264,audio/aac" 가 있습니다
- 사전) PlaybackMode 설명 :
>> 라이브, 라이브 재생 또는 아카이브된 온디맨드 데이터를 검색할지 여부입니다
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------
1. PlaybackMode [LIVE] 설명 :
>> HLS 미디어 재생 목록은 사용 가능한 최신 조각으로 계속 업데이트됩니다
>> 미디어 플레이어에서 이러한 유형의 세션이 재생되면 사용자 인터페이스는 일반적으로 재생 창에서 표시할 위치를 선택할 수 있는 스크롤 제어 없이 "실시간" 알림을 표시합니다
>> 조각 간에 간격이 있더라도 (즉, 조각이 누락된 경우) 사용 가능한 최신 조각이 HLS 미디어 재생 목록에 포함되며, 미디어 플레이어가 중지되거나 재생이 점프될 수 있습니다
>> 요약 설명 : 가장 최신 프래그먼트부터 재생 (실시간 성 / 지연 최소 / 끊김 위험 높음)
2. PlaybackMode [LIVE_REPLAY] 설명 :
>> HLS 미디어 재생 목록은 지정된 시작 시간의 조각을 포함하여 약간 이전 프래그먼트로부터 재생을 시작하는 방식입니다
>> 해당 방식으로 재생을 하기 위해서는 반드시 FragmentSelector 를 포함해야하며, 어느 시점부터 재생할지 시작 시점 timestamp 값을 지정해야합니다
- StartTimestamp : 최대 1시간 전까지 가능 (아카이브 설정에 따라 다름)
- EndTimestamp : 보통 new Date()로 현재 시점
: 해당 값 지정 시 AWS는 그 시점까지만 프래그먼트를 포함한 HLS(m3u8) 리스트를 생성하고, 그 이후 프래그먼트는 재생되지 않습니다.
: 즉, 녹화 영상이 끝까지 재생 되지 않을 수 있음
: 녹화 영상을 끝까지 보고 싶은 경우 해당 값 지정을 하지 않고 StartTimestamp 만 지정
- 시간 기준 : SERVER_TIMESTAMP 권장 (신뢰도 ↑)
: SERVER_TIMESTAMP (타임스탬프는 서버 시작 타임스탬프가 됩니다)
: PRODUCER_TIMESTAMP (타임스탬프는 생산자 시작 타임스탬프가 됩니다)
- 타임스탬프 범위 : KVS 가 해당 범위의 .ts 프래그먼트를 자동 추출해 m3u8 생성
>> 요약 설명 : 약간 이전 프래그먼트부터 재생 시작 (더 안정적 / 끊김 적고 재생 부드러움 / AWS 콘솔 대시보드에서 설정 되어 표시 되는 방식)
3. PlaybackMode [ON_DEMAND] 설명 :
>> HLS 미디어 재생 목록에는에 지정된 수까지 세션의 모든 조각이 포함됩니다
>> 요약 설명 : 아카이브 재생
4. 자바스크립트 뷰어 HLS 재생 샘플 소스 코드 PlaybackMode [LIVE_REPLAY] :
// -----------------------------------------
// [DataEndpoint 엔드포인트를 기반으로 HLS 세션 URL 가져오기]
// -----------------------------------------
const kinesisVideoArchivedMedia = new AWS.KinesisVideoArchivedMedia({
region: region,
endpoint: endpoint,
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
});
const startTimestamp = new Date(Date.now() - 30 * 1000); // 과거 : 30초전
//const startTimestamp = new Date(Date.now() - 60 * 1000); // 과거 : 1분전
//const endTimestamp = new Date(); // 현재
//const endTimestamp = new Date(Date.now() + 60 * 1000); // 미래 : 1분후
kinesisVideoArchivedMedia.getHLSStreamingSessionURL({
StreamName: streamName,
PlaybackMode: 'LIVE_REPLAY', // 이전 데이터 부터 재생을 하므로 끊김 최소화 : AWS 콘솔 대시보드도 동일 설정
HLSFragmentSelector: {
FragmentSelectorType: 'SERVER_TIMESTAMP', // 또는 PRODUCER_TIMESTAMP
TimestampRange: {
StartTimestamp: startTimestamp,
//EndTimestamp: endTimestamp // 디바이스가 올린 영상 종료까지 출력 위해 주석 : 주석하지 않으면 시작 ~ 종료 범위까지의 영상만 재생 됨
}
}
}, function(err, response){
if (err){
console.error("[getHLSStreamingSessionURL] : [ERROR] : ", JSON.stringify(err.message));
return;
}
const hlsUrl = response.HLSStreamingSessionURL;
if (hlsUrl != null && hlsUrl != '' && hlsUrl != 'undefined'){
Hls.DefaultConfig.debug = true; // 디버깅 로그 출력
if (Hls.isSupported()){ // Hls 지원 여부 확인
const hls = new Hls(); // Default
hls.loadSource(hlsUrl);
hls.attachMedia(remoteView);
// [비디오 AutoPlay 설정으로 주석 처리]
/*
hls.on(Hls.Events.MANIFEST_PARSED, function(){
remoteView.play();
console.log("[setSystem] : [getHLSStreamingSessionURL] : Hls 스트리밍 재생 수행]");
});
// */
hls.on(Hls.Events.ERROR, function(event, data){
console.error("[getHLSStreamingSessionURL] : [Hls.Events.ERROR] : ", JSON.stringify(data));
// [에러 분기 처리 시 사용]
// if (data.details === 'bufferStalledError'){ }
// if (data.details === 'bufferStalledError'){ }
});
}
}
})
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[AWS 사이트 : GetHLSStreamingSessionURL 설명]
https://docs.aws.amazon.com/ko_kr/kinesisvideostreams/latest/dg/API_reader_GetHLSStreamingSessionURL.html#API_reader_GetHLSStreamingSessionURL_RequestSyntax
[업무 이슈] android 안드로이드 aws kvs hls 스트리밍 동영상 업로드 이슈 - mp4 파일 ffmpeg 트랜스코딩 mkv 파일 변환
https://blog.naver.com/kkh0977/223878649342?trackingCode=blog_bloghome_searchlist
[안드로이드 Raw 폴더에 저장 된 MKV 형식 파일 Aws Kvs HLS 비디오 스트리밍 업로드 수행]
https://blog.naver.com/kkh0977/223874458019?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'Aws (Amazon)' 카테고리의 다른 글
Comments
