투케이2K

1030. (Android/Java) [기능 보완] Aws Kvs WebRTC 신호 채널 목록 확인 시 NextToken 사용해 전체 리스트 목록 조회 수행 본문

Android

1030. (Android/Java) [기능 보완] Aws Kvs WebRTC 신호 채널 목록 확인 시 NextToken 사용해 전체 리스트 목록 조회 수행

투케이2K 2025. 9. 20. 09:32
728x90

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java / Kotlin


- 개발 툴 : AndroidStudio


- 기술 구분 : AWS / Aws Kinesis Video Streams / WebRTC


- 사전) 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 조합)

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

new Thread(){
    @Override
    public void run(){

        // ---------------------------------------------
        // [AWS IAM 계정 Key 정보 변수 선언]
        // ---------------------------------------------
        String ACCESS_KEY = "AK..A6";
        String SECRET_KEY = "mP..5J";
        String REGION = "ap-northeast-2";


        // ---------------------------------------------
        // [AWS 자격 증명 설정]
        // ---------------------------------------------
        AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);


        // ---------------------------------------------
        // [AWSKinesisVideoClient 생성]
        // ---------------------------------------------
        AWSKinesisVideo awsKinesisVideoClient = new AWSKinesisVideoClient(credentials);

        //awsKinesisVideoClient.setRegion(Region.getRegion("ap-northeast-1"));
        awsKinesisVideoClient.setRegion(Region.getRegion(REGION));


        // ---------------------------------------------
        // [ListSignalingChannelsRequest 객체 생성]
        // ---------------------------------------------
        ListSignalingChannelsRequest request = new ListSignalingChannelsRequest(); // NextToken 방식으로 전체 조회 요청
        //ListSignalingChannelsRequest request = new ListSignalingChannelsRequest().withMaxResults(10000); // 최대 10,000까지 가능


        // ---------------------------------------------
        // [While 반복문과 nextToken 을 사용해 신호 채널 전체 목록 리스트 정보 확인]
        // ---------------------------------------------
        List<ChannelInfo> allChannels = new ArrayList<>();

        String nextToken = null;

        do {
            if (nextToken != null) {
                S_Log.w("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> [nextToken not null] >>>>>>>>>>>>>>>>>>>>>>>");
                request.setNextToken(nextToken); // TODO Set NextToken
            }
            else {
                S_Log.e("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> [nextToken is null] >>>>>>>>>>>>>>>>>>>>>>>");
            }

            ListSignalingChannelsResult result = awsKinesisVideoClient.listSignalingChannels(request);

            List<ChannelInfo> list = result.getChannelInfoList(); // Get Channel List

            if (list != null && list.size()>0){

                for (int i=0; i<list.size(); i++){

                    // [채널 개별 정보 확인]
                    //String channelArn = list.get(i).getChannelARN();
                    String channelName = list.get(i).getChannelName();
                    //String channelStatus = list.get(i).getChannelStatus();
                    //Date channelCreateTime = list.get(i).getCreationTime();
                    //String channelVersion = list.get(i).getVersion();
                    //String channelType = list.get(i).getChannelType();

                    S_Log.w("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> ["+String.valueOf(channelName)+"] >>>>>>>>>>>>>>>>>>>>>>>");
                }

                allChannels.addAll(result.getChannelInfoList()); // Add Array List
            }

            nextToken = result.getNextToken(); // TODO Get NextToken
        } while (nextToken != null);


        S_Log._W_("AWS KVS WebRTC 신호 채널 리스트 정보 확인", new String[]{
                "List Size :: " + String.valueOf(allChannels.size())
        });

    }
}.start();

// --------------------------------------------------------------------------------------





// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[자바스크립트 AWS WebRTC 실시간 동영상 재생 수행]

https://blog.naver.com/kkh0977/223170500993?trackingCode=blog_bloghome_searchlist


[Aws Kvs WebRTC 실시간 영상 재생 관련 구성 요소 및 용어 정리]

https://blog.naver.com/kkh0977/223858189791


[Aws KVS WebRTC 채널 생성 및 삭제에 관한 요금 정책 정리]

https://blog.naver.com/kkh0977/223995447546


[안드로이드 AWS KVS 신호 채널 리스트 조회 ListSignalingChannels API 호출 시 AWS4Signer 헤더 생성 방법]

https://blog.naver.com/kkh0977/223949022834?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments