투케이2K

980. (Android/Java) [간단 소스] Aws Kvs 실시간 신호 채널 삭제 요청 수행 본문

Android

980. (Android/Java) [간단 소스] Aws Kvs 실시간 신호 채널 삭제 요청 수행

투케이2K 2025. 5. 3. 18:05

[개발 환경 설정]

개발 툴 : 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 [SEARCH FAST] : [디바이스] : KVS 실시간 신호 채널 삭제 수행
// --------------------------------------------------------
// [호출 소스 코드]
// --------------------------------------------------------
/*
try {

    C_Aws_Kvs_Module.deviceKvsDeleteSignalChannel(A_Intro.this, C_Aws_Kvs_Module.ACCESS_KEY, C_Aws_Kvs_Module.SECRET_KEY, C_Aws_Kvs_Module.REGION, "CHANNEL_ARN")
            .subscribeOn(AndroidSchedulers.mainThread()) // [Observable (생성자) 로직을 IO 스레드에서 실행 : 백그라운드]
            .observeOn(Schedulers.io()) // [Observer (관찰자) 로직을 메인 스레드에서 실행]
            .subscribe(new Observer<Boolean>() { // [Observable.create 타입 지정]
                @Override
                public void onSubscribe(@NonNull Disposable d) {
                }

                @Override
                public void onNext(@NonNull Boolean value) {
                    S_Log._W_("AWS KVS 실시간 신호 채널 삭제 수행 확인 :: onNext", new String[]{String.valueOf(value)});
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    S_Log._E_("AWS KVS 실시간 신호 채널 삭제 수행 확인 :: onError", new String[]{String.valueOf(e.getMessage())});
                }

                @Override
                public void onComplete() {
                }
            });

}
catch (Exception e) {
    S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, e);
}
*/
// --------------------------------------------------------
public static String deviceKvsDeleteSignalChannel_Error_Message = "";
public static Observable<Boolean> deviceKvsDeleteSignalChannel(Context mContext, String ACCESS_KEY, String SECRET_KEY, String REGION, String CHANNEL_ARN) {
    S_Log._D_(ACTIVITY_NAME + " :: deviceKvsDeleteSignalChannel :: [디바이스] :: KVS 실시간 신호 채널 삭제 수행", new String[]{
            "ACCESS_KEY :: " + String.valueOf(ACCESS_KEY),
            "SECRET_KEY :: " + String.valueOf(SECRET_KEY),
            "REGION :: " + String.valueOf(REGION),
            "CHANNEL_ARN :: " + String.valueOf(CHANNEL_ARN),
    });

    // [로직 처리 실시]
    return Observable.create(subscriber -> {
        try {

            // [리턴 변수 선언]
            final boolean[] returnData = {false};


            // [에러 메시지 초기화]
            deviceKvsDeleteSignalChannel_Error_Message = "";


            // [인풋 데이터 널 체크 수행]
            if (mContext != null
                    && C_Util.stringNotNull(ACCESS_KEY) == true
                    && C_Util.stringNotNull(SECRET_KEY) == true
                    && C_Util.stringNotNull(REGION) == true
                    && C_Util.stringNotNull(CHANNEL_ARN) == true){

                // TODO [http 통신을 수행하므로 Thread 처리 수행]
                new Thread(){
                    @Override
                    public void run(){

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


                        // [AWS IoT 클라이언트 생성]
                        AWSKinesisVideo awsKinesisVideoClient = new AWSKinesisVideoClient(credentials);

                        if (C_Util.stringNotNull(REGION) == true){ // TODO [리젼 정보 설정]
                            //awsKinesisVideoClient.setRegion(Region.getRegion("ap-northeast-1"));
                            awsKinesisVideoClient.setRegion(Region.getRegion(REGION));
                        }


                        // [DeleteSignalingChannelRequest 신호 채널 삭제 요청]
                        DeleteSignalingChannelRequest deleteSignalingChannelRequest = new DeleteSignalingChannelRequest()
                                .withChannelARN(CHANNEL_ARN);


                        // [로직 처리 수행]
                        try {

                            // TODO [신호 채널 삭제]
                            awsKinesisVideoClient.deleteSignalingChannel(deleteSignalingChannelRequest);

                            // TODO [리턴 수행]
                            S_Log._W_(ACTIVITY_NAME + " :: deviceKvsDeleteSignalChannel :: [디바이스] :: KVS 실시간 신호 채널 삭제 성공", new String[]{"channelARN :: " + String.valueOf(CHANNEL_ARN)});

                            returnData[0] = true; // [리턴 변수에 삽입]

                            if (subscriber != null && subscriber.isDisposed() == false){
                                subscriber.onNext(returnData[0]);
                                subscriber.onComplete();
                            }

                        } catch (Exception es) {
                            es.printStackTrace();

                            S_Log._E_(ACTIVITY_NAME + " :: deviceKvsDeleteSignalChannel :: [디바이스] :: KVS 실시간 신호 채널 삭제 실패", new String[]{String.valueOf(es.getMessage())});

                            // [에러 메시지 삽입]
                            deviceKvsDeleteSignalChannel_Error_Message = C_Format.form_message(new String[]{
                                    "CODE :: " + C_Util.getSourceCodeLine(),
                                    "EXPLANATION :: " + "[디바이스] :: KVS 스트리밍 삭제 수행 중 예외 상황이 발생했습니다.",
                                    "EXCEPTION [1] :: " + String.valueOf(es.getMessage())
                            });

                            if (subscriber != null && subscriber.isDisposed() == false){
                                subscriber.onError(new Throwable(deviceKvsDeleteSignalChannel_Error_Message));
                                subscriber.onComplete();
                            }

                        }

                    }
                }.start();

            }
            else {
                S_Log._E_(ACTIVITY_NAME + " :: deviceKvsDeleteSignalChannel :: [디바이스] :: KVS 실시간 신호 채널 삭제 수행 에러", new String[]{"Input Data Is Null (ACCESS_KEY, SECRET_KEY, REGION, CHANNEL_ARN)"});

                // [에러 메시지 삽입]
                deviceKvsDeleteSignalChannel_Error_Message = C_Format.form_message(new String[]{
                        "CODE :: " + C_Util.getSourceCodeLine(),
                        "EXPLANATION :: " + "[디바이스] :: KVS 실시간 신호 채널 삭제에 필요한 필수 값을 확인해주세요.",
                        "ERROR :: Input Data Is Null (ACCESS_KEY, SECRET_KEY, REGION, CHANNEL_ARN)"
                });

                if (subscriber != null && subscriber.isDisposed() == false){
                    subscriber.onError(new Throwable(deviceKvsDeleteSignalChannel_Error_Message));
                    subscriber.onComplete();
                }

            }

        }
        catch (Exception e){
            S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, e);

            // [에러 메시지 삽입]
            deviceKvsDeleteSignalChannel_Error_Message = C_Format.form_message(new String[]{
                    "CODE :: " + C_Util.getSourceCodeLine(),
                    "EXPLANATION :: " + "[디바이스] :: KVS 실시간 신호 채널 삭제 수행 중 예외 상황이 발생했습니다.",
                    "EXCEPTION [2] :: " + String.valueOf(e.getMessage())
            });

            if (subscriber != null && subscriber.isDisposed() == false){
                subscriber.onError(new Throwable(deviceKvsDeleteSignalChannel_Error_Message));
                subscriber.onComplete();
            }

        }
    });
}

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






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

[kvs (Kinesis Video Streams) , HLS (HTTP 라이브 스트리밍) 설명 및 정리]

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


[Kvs 실시간 영상 재생 관련 STUN , TUN 서버 연결 이슈]

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


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

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


[AWS 사이트 주요 질문 정리 사이트]

https://aws.amazon.com/ko/kinesis/video-streams/faqs/

// --------------------------------------------------------------------------------------
 
반응형
Comments