Notice
Recent Posts
Recent Comments
Link
투케이2K
983. (Android/Java) [간단 소스] Aws Kvs 실시간 영상 재생 스트림 리스트 확인 - ListStreamsRequest 본문
Android
983. (Android/Java) [간단 소스] Aws Kvs 실시간 영상 재생 스트림 리스트 확인 - ListStreamsRequest
투케이2K 2025. 5. 4. 16:23[개발 환경 설정]
개발 툴 : 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.getKvsStreamList(A_Intro.this, C_Aws_Kvs_Module.ACCESS_KEY, C_Aws_Kvs_Module.SECRET_KEY, C_Aws_Kvs_Module.REGION)
.subscribeOn(AndroidSchedulers.mainThread()) // [Observable (생성자) 로직을 IO 스레드에서 실행 : 백그라운드]
.observeOn(Schedulers.io()) // [Observer (관찰자) 로직을 메인 스레드에서 실행]
.subscribe(new Observer<ArrayList<String>>() { // [Observable.create 타입 지정]
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull ArrayList<String> 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 getKvsStreamList_Error_Message = "";
public static Observable<ArrayList<String>> getKvsStreamList(Context mContext, String ACCESS_KEY, String SECRET_KEY, String REGION) {
S_Log._D_(ACTIVITY_NAME + " :: getKvsStreamList :: [재생 정보] : KVS 실시간 영상 재생 스트림 리스트 확인 수행", new String[]{
"ACCESS_KEY :: " + String.valueOf(ACCESS_KEY),
"SECRET_KEY :: " + String.valueOf(SECRET_KEY),
"REGION :: " + String.valueOf(REGION),
});
// [로직 처리 실시]
return Observable.create(subscriber -> {
try {
// [리턴 변수 선언]
final ArrayList<String> returnData = new ArrayList<>();
// [에러 메시지 초기화]
getKvsStreamList_Error_Message = "";
// [인풋 데이터 널 체크 수행]
if (mContext != null
&& C_Util.stringNotNull(ACCESS_KEY) == true
&& C_Util.stringNotNull(SECRET_KEY) == true
&& C_Util.stringNotNull(REGION) == true){
// TODO [http 통신을 수행하므로 Thread 처리 수행]
new Thread(){
@Override
public void run(){
// [AWS 자격 증명 설정]
AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
// [AWSKinesisVideoClient 생성]
AWSKinesisVideo awsKinesisVideoClient = new AWSKinesisVideoClient(credentials);
if (C_Util.stringNotNull(REGION) == true){ // TODO [리젼 정보 설정]
//awsKinesisVideoClient.setRegion(Region.getRegion("ap-northeast-1"));
awsKinesisVideoClient.setRegion(Region.getRegion(REGION));
}
// [ListStreamsRequest 객체 생성 : KVS]
ListStreamsRequest request = new ListStreamsRequest();
// [로직 처리 수행]
try {
// TODO [ListStreamsResult 확인]
ListStreamsResult result = awsKinesisVideoClient.listStreams(request);
// TODO [StreamInfo 출력]
List<StreamInfo> list = result.getStreamInfoList();
// TODO [리턴 변수 체크]
if (list != null && list.size()>0){
S_Log._W_(ACTIVITY_NAME + " :: getKvsStreamList :: [재생 정보] : KVS 실시간 영상 재생 스트림 리스트 확인 성공", new String[]{String.valueOf(list)});
for (int i=0; i<list.size(); i++){
// [StreamInfo 정보 파싱 수행]
StreamInfo streamInfo = list.get(i);
String streamArn = streamInfo.getStreamARN();
String streamName = streamInfo.getStreamName();
String deviceName = streamInfo.getDeviceName();
String status = streamInfo.getStatus();
S_Log.w("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>> ["+String.valueOf(streamArn)+"] : [" + String.valueOf(streamName) + "] : " + String.valueOf(status) + "] >>>>>>>>>>>>>>>>>>>>>>");
// [리턴 변수에 삽입]
returnData.add(String.valueOf(streamArn));
}
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onNext(returnData);
subscriber.onComplete();
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: getKvsStreamList :: [재생 정보] : KVS 실시간 영상 재생 스트림 리스트 확인 실패", new String[]{"KVS 실시간 영상 재생 스트림 리스트 값이 없습니다. (getStreamInfoList Is Null)"});
// [에러 메시지 삽입]
getKvsStreamList_Error_Message = C_Format.form_message(new String[]{
"CODE :: " + C_Util.getSourceCodeLine(),
"EXPLANATION :: " + "[재생 정보] : KVS 실시간 영상 재생 스트림 리스트 확인 값이 없습니다. (getStreamInfoList Is Null)"
});
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onError(new Throwable(getKvsStreamList_Error_Message));
subscriber.onComplete();
}
}
} catch (Exception es) {
es.printStackTrace();
S_Log._E_(ACTIVITY_NAME + " :: getKvsStreamList :: [재생 정보] : KVS 실시간 영상 재생 스트림 리스트 확인 실패", new String[]{String.valueOf(es.getMessage())});
// [에러 메시지 삽입]
getKvsStreamList_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(getKvsStreamList_Error_Message));
subscriber.onComplete();
}
}
}
}.start();
}
else {
S_Log._E_(ACTIVITY_NAME + " :: getKvsStreamList :: [재생 정보] : KVS 실시간 영상 재생 스트림 리스트 확인 에러", new String[]{"Input Data Is Null (ACCESS_KEY, SECRET_KEY, REGION)"});
// [에러 메시지 삽입]
getKvsStreamList_Error_Message = C_Format.form_message(new String[]{
"CODE :: " + C_Util.getSourceCodeLine(),
"EXPLANATION :: " + "[재생 정보] : KVS 실시간 영상 재생 스트림 리스트 확인에 필요한 필수 값을 확인해주세요.",
"ERROR :: Input Data Is Null (ACCESS_KEY, SECRET_KEY, REGION)"
});
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onError(new Throwable(getKvsStreamList_Error_Message));
subscriber.onComplete();
}
}
}
catch (Exception e){
S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, e);
// [에러 메시지 삽입]
getKvsStreamList_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(getKvsStreamList_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/
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments