투케이2K

1032. (Android/Java) AWS WebRTC GetSignalingChannelEndpoint 신호 채널 엔드포인트 목록 조회 수행 본문

Android

1032. (Android/Java) AWS WebRTC GetSignalingChannelEndpoint 신호 채널 엔드포인트 목록 조회 수행

투케이2K 2025. 10. 9. 20:06
728x90

[개발 환경 설정]

개발 툴 : 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
반응형
Comments