Notice
Recent Posts
Recent Comments
Link
투케이2K
200. (TWOK/LOGIC) [Web] 자바스크립트 AWS Kvs HLS getHLSStreamingSessionURL 호출 시 타이밍 이슈 발생 API 호출 재시도 로직 본문
투케이2K 로직정리
200. (TWOK/LOGIC) [Web] 자바스크립트 AWS Kvs HLS getHLSStreamingSessionURL 호출 시 타이밍 이슈 발생 API 호출 재시도 로직
투케이2K 2026. 6. 7. 13:02728x90
반응형
[로직 정리]
정리 로직 : Web / JavaScript
제 목 : [Web] 자바스크립트 AWS Kvs HLS getHLSStreamingSessionURL 호출 시 타이밍 이슈 발생 API 호출 재시도 로직

[설 명]
// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------
1. 제 목 : [Web] 자바스크립트 AWS Kvs HLS getHLSStreamingSessionURL 호출 시 타이밍 이슈 발생 API 호출 재시도 로직
2. 테스트 환경 : Web / JavaScript / chrome
3. 사전) 👉 비디오 스트림 간략 설명 정리 :
>> 비디오 스트림은 라이브 비디오 및 기타 시간이 인코딩된 데이터를 캡처하고, 선택적으로 저장하고, 실시간, 배치 혹은 애드혹 형식으로 데이터의 소비를 가능하게 할 수 있도록 해 주는 리소스입니다
>> 일반적인 구성에서는 Kinesis 비디오 스트림은 데이터를 푸시해 주는 생산자가 하나만 있습니다 (실시간 스트리밍 데이터를 밀어 넣어주는 하드웨어 기기)
4. 사전) 👉 HLS 개념 설명 :
>> HTTP 라이브 스트리밍으로 인터넷을 통해 소비자에게 미디어 콘텐츠를 제공하는 데 사용되는 스트리밍 프로토콜입니다
>> HLS 는 Apple 장치에서 지원하는 유일한 형식입니다
>> 미디어는 h.264 또는 h.265 인코딩된 비디오를 포함해야 하며 AAC 인코딩된 오디오는 선택 사항입니다
>> 미디어 타입 유효한 값의 예로는 "video/h264" 및 "video/h264,audio/aac" 가 있습니다
5. 사전) 👉 PlaybackMode 설명 :
>> 라이브, 라이브 재생 또는 아카이브된 온디맨드 데이터를 검색할지 여부입니다
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------
------------------------------------------------------
🟦 사전 정리) 로직 구현 관련 필요 내용 정리
------------------------------------------------------
1. AWS Kinesis Video Streams (KVS) HLS 스트리밍 환경에서는 타이밍 이슈로 인해 getHLSStreamingSessionURL() 호출이 일시적으로 실패하는 경우가 실제로 발생해 보완 로직 구현 필요
2. getHLSStreamingSessionURL() 호출이 실패할 수 있는 발생 원인 정리 :
>> Fragment 인덱싱 지연 : Producer 가 KVS 에 영상을 업로드한 직후에는 실제 영상 데이터는 이미 업로드되고 있어도 Fragment 인덱싱 완료 전 상태라면 실패할 수 있습니다.
>> Stream 생성 직후 : Stream 생성 직후 바로 PutMedia 를 하는 경우 GetDataEndpoint , GetHLSStreamingSessionURL 이 내부적으로 아직 준비되지 않은 상태일 수 있습니다.
>> Live Edge 생성 전 : PlaybackMode.LIVE 사용 시 최소 몇 개 Fragment 가 쌓여야 HLS Playlist 가 생성됩니다.
>> AWS 내부 Eventually Consistent 특성 : KVS 도 완전한 Strong Consistency 기반 서비스는 아닙니다. 상황이 간헐적으로 발생할 수 있습니다.
------------------------------------------------------
🟦 로직 정리) 자바스크립트에서 HLS 뷰어 재생 및 getHLSStreamingSessionURL 재시도 로직
------------------------------------------------------
1. AWS IAM 계정 AccessKey , SecretKey 정보를 사용해 kinesisVideoClient = new AWS.KinesisVideo 초기화 수행
2. kinesisVideoClient 를 사용해서 KVS 스트림 엔드포인트 가져오기 수행
kinesisVideoClient.getDataEndpoint({
StreamName: parse_streamName,
APIName: 'GET_HLS_STREAMING_SESSION_URL'
})
3. 획득한 response.DataEndpoint; 정보를 사용해서 엔드포인트를 기반으로 HLS 세션 URL 가져오기 KinesisVideoArchivedMedia 초기화 수행
kinesisVideoArchivedMedia = new AWS.KinesisVideoArchivedMedia({
region: region,
endpoint: endpoint,
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
});
4. kinesisVideoArchivedMedia.getHLSStreamingSessionURL HLS 세션 URL 가져오기 요청 수행 및 에러 발생 시 반복 요청 코드 작성
kinesisVideoArchivedMedia.getHLSStreamingSessionURL( params , function(err, response){
if (err){
// ✅ [에러 발생 시 일정 시간 딜레이 후 getHLSStreamingSessionURL 재시도 요청 수행]
if (retryCnt < 6){
retryCnt ++; // 카운트 증가
console.error("[getLiveHLSUrl] : [getHLSStreamingSessionURL] : 타이머 대기 및 재시도 수행 : ", retryCnt);
// 10초(10000ms) 대기 후 함수 실행
setTimeout(() => {
getLiveHLSUrl(region, endpoint, accessKeyId, secretAccessKey, streamName, hlsStreamType);
}, 5000);
}
else {
var errMsg = err.message;
if (errMsg.indexOf("No fragments found in the stream for the streaming request") >= 0){
errMsg += "\n\n" + "현재 재생 되고 있는 스트리밍이 없습니다. 스트리밍 재생 여부를 다시 확인해주세요." + "\n";
}
C_SweetAlert_Error_OK("알 림", "스트림 영상 재생 중 문제가 발생 했습니다. [getHLSStreamingSessionURL] : [Error] : " + errMsg, "확인");
return;
}
}
else {
// ✅ [정상 URL 확인이 성공 한 경우]
const hlsUrl = response.HLSStreamingSessionURL;
const hls = new Hls(); // Default
hls.loadSource(hlsUrl);
hls.attachMedia(remoteView);
hls.on(Hls.Events.ERROR, function(event, data){
console.error("-");
console.error("=========================================");
console.error("[getLiveHLSUrl] : [getHLSStreamingSessionURL] : Hls.Events.ERROR");
console.error("-----------------------------------------");
console.error("[ERROR] : ", JSON.stringify(data));
console.error("-----------------------------------------");
console.error("[data.type] : ", data.type);
console.error("-----------------------------------------");
console.error("[data.details] : ", data.details);
console.error("-----------------------------------------");
console.error("[data.fatal] : ", data.fatal);
console.error("=========================================");
console.error("-");
// [에러 분기 처리 시 사용]
// if (data.details === 'bufferStalledError'){ }
// if (data.details === 'bufferStalledError'){ }
});
}
})
------------------------------------------------------
🟦 참고 사항) Retry 가 필요한 에러와 필요 없는 에러 정리
------------------------------------------------------
1. Retry 권장 :
>> ResourceNotFoundException
>> ClientLimitExceededException
>> ConnectionTimeout
>> SocketTimeout
>> InternalFailure
2. Retry 불필요 :
>> AccessDeniedException
>> InvalidCodecPrivateDataException
>> InvalidArgumentException
>> ExpiredTokenException
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
▶️ [Web/JavaScript] AWS Kvs HLS 뷰어 Viewer 비디오 스트림 영상 재생 수행
https://kkh0977.tistory.com/8269
https://blog.naver.com/kkh0977/224004858035
▶️ [Aws Kinesis Video Streams] Aws KVS 비디오 스트림 , 신호 전송 채널 차이점 설명 정리
https://kkh0977.tistory.com/7956
https://blog.naver.com/kkh0977/223854439046?trackingCode=blog_bloghome_searchlist
▶️ [Aws Kvs HSL 비디오 스트림 녹화 영상 관련 학습 정리]
https://kkh0977.tistory.com/7967
https://blog.naver.com/kkh0977/223855980812?trackingCode=blog_bloghome_searchlist
▶️ [자바스크립트 AWS Kvs HLS 비디오 스트림 채널 생성 수행 - createStream]
https://kkh0977.tistory.com/8276
https://blog.naver.com/kkh0977/223916957964
▶️ [자바스크립트 AWS Kvs HLS 비디오 스트림 채널 삭제 수행 - deleteStream]
https://kkh0977.tistory.com/8098
https://blog.naver.com/kkh0977/223918327833
▶️ [JavaScript] The FragmentSelector is required for LIVE_REPLAY PlaybackMode
https://kkh0977.tistory.com/8256
https://blog.naver.com/kkh0977/223997369730?trackingCode=blog_bloghome_searchlist
▶️ [JavaScript] No fragments found in the stream for the streaming request
https://kkh0977.tistory.com/8257
https://blog.naver.com/kkh0977/223997383598?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments
