Notice
Recent Posts
Recent Comments
Link
투케이2K
988. (Android/Java) [간단 소스] 안드로이드 Aws Kvs HLS 비디오 스트리밍 putMedia 호출 시 필요한 Signature V4 서명 방법 본문
Android
988. (Android/Java) [간단 소스] 안드로이드 Aws Kvs HLS 비디오 스트리밍 putMedia 호출 시 필요한 Signature V4 서명 방법
투케이2K 2025. 5. 22. 18:42[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Aws / Kvs / Kinesis Video Streams
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[사전) 필요 설정 정리] : build.gradle 의존성 부여
// --------------------------------------------------------------------------------------
// [AWS] : [target 31 이상 의존성]
implementation 'com.amazonaws:aws-android-sdk-kms:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-s3:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-iot:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-kinesisvideo:2.57.0'
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// --------------------------------------------------------
// TODO [AWS Signature V4 서명 적용]
// --------------------------------------------------------
// import com.amazonaws.DefaultRequest;
// import com.amazonaws.Request;
// --------------------------------------------------------
S_Log._D_(ACTIVITY_NAME + " :: deviceKvsHlsStreamSend :: [디바이스] :: KVS HLS 스트리밍 AWS Signature V4 헤더 서명 수행 실시", null);
Request<?> signRequest = new DefaultRequest<>("kinesisvideo");
signRequest.setHttpMethod(HttpMethodName.POST);
signRequest.setEndpoint(new URI(dataEndpoint)); // TODO [DataEndpoint 적용]
signRequest.setEncodedResourcePath("/putMedia"); // TODO [Path 설정 : 해당 값 추가 중요]
signRequest.addHeader("Host", new URI(dataEndpoint).getHost()); // TODO [호스트 지정]
signRequest.addHeader("x-amzn-stream-name", STREAM_NAME); // TODO [스트림 명칭]
signRequest.addHeader("x-amzn-fragment-timecode-type", "ABSOLUTE"); // TODO [타임 코드]
// TODO [수동 설정 시 참고 코드]
/*
SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String amzDate = dateTimeFormat.format(new Date());
signRequest.addHeader("x-amzn-producer-start-timestamp", amzDate);
// */
signRequest.addHeader("Content-Type", "application/octet-stream"); // TODO [Body 에서 지정한 MediaType 타입]
signRequest.setContent(new StringInputStream("")); // TODO [Empty Body 지정 필요]
// --------------------------------------------------------
AWS4Signer signer = new AWS4Signer();
signer.setServiceName("kinesisvideo");
signer.setRegionName(REGION);
signer.sign(signRequest, credentials); // TODO [Sign 인증 수행]
// --------------------------------------------------------
// --------------------------------------------------------
// TODO [서명된 헤더들을 okhttp 헤더에 반영]
// --------------------------------------------------------
Headers.Builder okHttpHeaders = new Headers.Builder();
for (Map.Entry<String, String> entry : signRequest.getHeaders().entrySet()) {
okHttpHeaders.add(entry.getKey(), entry.getValue());
S_Log.w("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Okhttp Header Insert :: " + String.valueOf(entry.getKey()) + " :: " + String.valueOf(entry.getValue()) + " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
// --------------------------------------------------------
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[kvs (Kinesis Video Streams) , HLS (HTTP 라이브 스트리밍) 설명 및 정리]
https://blog.naver.com/kkh0977/223724719256?trackingCode=blog_bloghome_searchlist
[AWS 사이트 주요 질문 정리 사이트]
https://aws.amazon.com/ko/kinesis/video-streams/faqs/
[Aws Kvs 실시간 영상 업로드 위한 엔드포인트 정보 확인 - GetDataEndpointRequest]
https://blog.naver.com/kkh0977/223855177383
[API 요청용 AWS Signature Version 4]
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_sigv.html
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments