Notice
Recent Posts
Recent Comments
Link
투케이2K
1032. (Android/Java) AWS WebRTC GetSignalingChannelEndpoint 신호 채널 엔드포인트 목록 조회 수행 본문
Android
1032. (Android/Java) AWS WebRTC GetSignalingChannelEndpoint 신호 채널 엔드포인트 목록 조회 수행
투케이2K 2025. 10. 9. 20:06728x90
[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : AWS / KVS / WebRTC / GetSignalingChannelEndpoint
- 사전) AWS 의존성 부여 설정
// --------------------------------------------
// [Aws build.gradle 라이브러리 정의] : targetSdk 33 ~ 34
// --------------------------------------------
/**
* 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'
* */
- 사전) WebRTC 설명 :
>> WebRTC 란 웹, 애플리케이션, 디바이스 간 중간자 없이 오디오나 영상 미디어를 포착하고 실시간 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술입니다
>> WebRTC 는 간단한 API 를 통해 웹 브라우저, 모바일 애플리케이션 및 커넥티드 디바이스 간에 실시간 통신을 활성화할 수 있습니다
>> WebRTC 주요 용어 :
- SDP (Session Description Protocol) : 오디오/비디오 코덱, 해상도, 포트 등 스트리밍 정보를 담은 텍스트 포맷
- Offer / Answer : 통신 연결을 협상하기 위한 SDP 메시지 (초기 연결 설정)
- ICE (Interactive Connectivity Establishment) : NAT/P2P 환경에서도 연결 가능한 경로(IP, 포트 등)를 찾기 위한 기술
- Candidate : 가능한 연결 경로 (IP + Port 조합)
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// --------------------------------------------
// [변수 선언]
// --------------------------------------------
String ACCESS_KEY = "AK..7Q"; // IAM 정보
String SECRET_KEY = "Zz..xj"; // IAM 정보
String REGION = "ap-northeast-1"; // 리전
String CHANNEL_NAME = "DEVICE_1"; // 채널 명칭
String ROLE = "VIEWER"; // ROLE 역할 or MASTER
// ---------------------------------------------
// [AWSCredentials 자격 증명 수행]
// ---------------------------------------------
AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); // TODO [IAM 계정 Key 초기화]
//BasicSessionCredentials credentials = new BasicSessionCredentials(accessKey, secretKey, sessionToken); // TODO [STS 임시 정보 초기화]
// ---------------------------------------------
// [AWSKinesisVideoClient 생성]
// ---------------------------------------------
AWSKinesisVideo awsKinesisVideoClient = new AWSKinesisVideoClient(credentials);
awsKinesisVideoClient.setRegion(Region.getRegion(REGION));
// ---------------------------------------------
// [신호 채널 ARN 정보 조회 수행]
// ---------------------------------------------
DescribeSignalingChannelRequest request = new DescribeSignalingChannelRequest()
.withChannelName(CHANNEL_NAME);
DescribeSignalingChannelResult result = awsKinesisVideoClient.describeSignalingChannel(request);
// ---------------------------------------------
// [SingleMasterChannelEndpointConfiguration 객체 선언]
// ---------------------------------------------
ChannelInfo channelInfo = result.getChannelInfo(); // TODO Get ChannelInfo
String chStatus = channelInfo.getChannelStatus();
String chArn = channelInfo.getChannelARN();
SingleMasterChannelEndpointConfiguration endpointConfig = new SingleMasterChannelEndpointConfiguration()
.withProtocols("WSS", "HTTPS")
.withRole(ROLE); // TODO VIEWER | MASTER
// ---------------------------------------------
// [SignalingChannelEndpoint 조회 요청]
// ---------------------------------------------
GetSignalingChannelEndpointRequest sg_request = new GetSignalingChannelEndpointRequest()
.withChannelARN(chArn)
.withSingleMasterChannelEndpointConfiguration(endpointConfig);
GetSignalingChannelEndpointResult sg_Result = awsKinesisVideoClient.getSignalingChannelEndpoint(sg_request);
List<ResourceEndpointListItem> endpoints = sg_Result.getResourceEndpointList();
S_Log._D_("AWS Signaling ResourceEndpointList 조회 정보 확인", new String[]{String.valueOf(endpoints)});
if (endpoints != null && endpoints.size()>0){
for (ResourceEndpointListItem ep : endpoints) {
S_Log.w("KWON_TWOK","For EndPoint Check :: " + String.valueOf(ep.getProtocol()) + " / " + String.valueOf(ep.getResourceEndpoint()));
if ("WSS".equals(ep.getProtocol().trim())) {
// wss://v-9..d7.kinesisvideo.ap-northeast-1.amazonaws.com
returnData.put("WSS_URL", String.valueOf(ep.getResourceEndpoint()));
}
if ("HTTPS".equals(ep.getProtocol().trim())) {
// https://r-2c..55.kinesisvideo.ap-northeast-1.amazonaws.com
returnData.put("HTTPS_URL", String.valueOf(ep.getResourceEndpoint()));
}
}
S_Log._W_("AWS Signaling EndpointList 확인 성공", new String[]{String.valueOf(returnData)});
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Aws GetSignalingChannelEndpoint API 설명 사이트]
https://docs.aws.amazon.com/ko_kr/kinesisvideostreams/latest/dg/API_GetSignalingChannelEndpoint.html
[자바스크립트 AWS WebRTC 실시간 동영상 재생 수행]
https://blog.naver.com/kkh0977/223170500993?trackingCode=blog_bloghome_searchlist
[Aws Kvs WebRTC 실시간 영상 재생 관련 구성 요소 및 용어 정리]
https://blog.naver.com/kkh0977/223858189791
// --------------------------------------------------------------------------------------
728x90
반응형
'Android' 카테고리의 다른 글
Comments
