Overview of Scenario-Based Solutions
소셜 엔터테인먼트
이커머스 라이브 방송
Audio/Video Call
원거리 실시간 조작
스마트 고객 서비스
AI 인터뷰


onRemoteUserEnterRoom(B) 및 onUserVideoAvailable(B,true) 이 두 가지 이벤트 콜백을 받게 되며, 이는 방 "101"의 사용자들이 모두 스트리머 B의 음성 및 영상을 구독할 수 있음을 의미합니다.onRemoteUserEnterRoom(A) 및 onUserVideoAvailable(A,true) 이 두 가지 이벤트 콜백을 받게 되며, 이는 방 "102"의 사용자들이 모두 스트리머 A의 음성 및 영상을 구독할 수 있음을 의미합니다.ConnectOtherRoom을 호출하여 크로스 룸 연결을 설정하면 되며 양쪽은 다 호출하지 마십시오.ConnectOtherRoom을 여러 번 호출하여 여러 방의 스트리머와 크로스 룸 연결을 설정할 수 있으며, 현재 단일 스트리머는 최대 다른 방의 9명 스트리머와 크로스 룸 연결이 가능합니다.
public void connectOtherRoom(String roomId, String userId) {try {JSONObject jsonObj = new JSONObject();// 문자열 방 번호를 예로 들면, 숫자 방 번호 key는 roomId입니다jsonObj.put("strRoomId", roomId);jsonObj.put("userId", userId);mTRTCCloud.ConnectOtherRoom(jsonObj.toString());} catch (JSONException e) {e.printStackTrace();}}// 크로스 룸 연결 신청 결과의 콜백@Overridepublic void onConnectOtherRoom(String userId, int errCode, String errMsg) {// userId: 크로스 룸 연결하려는 다른 방의 스트리머의 사용자 ID입니다// errCode: 에러 코드입니다.ERR_NULL은 요청 성공을 나타냅니다// errMsg: 에러 정보입니다}
- (void)connectOtherRoom:(NSString *)roomId {NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];// 문자열 방 번호를 예로 들면, 숫자 방 번호 key는 roomId입니다[jsonDict setObject:roomId forKey:@"strRoomId"];[jsonDict setObject:self.userId forKey:@"userId"];NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil];NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];[self.trtcCloud connectOtherRoom:jsonString];}// 크로스 룸 연결 신청 결과의 콜백- (void)onConnectOtherRoom:(NSString *)userId errCode:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {// userId: 크로스 룸 연결하려는 다른 방의 스트리머의 사용자 ID입니다// errCode: 에러 코드입니다. ERR_NULL은 요청 성공을 나타냅니다// errMsg: 에러 정보입니다}
ConnectOtherRoom을 호출하여 크로스 룸 연결을 설정하면 되며, 양쪽은 다 호출하지 마십시오.@Overridepublic void onUserAudioAvailable(String userId, boolean available) {// 원격 사용자가 자신의 오디오를 게시/취소합니다// 자동 구독 모드에서는 사용자가 아무런 작업을 하지 않아도 SDK가 원격 사용자의 오디오를 자동으로 재생합니다.}@Overridepublic void onUserVideoAvailable(String userId, boolean available) {// 원격 사용자가 메인 비디오 화면을 게시/취소합니다if (available) {// 원격 사용자의 비디오 스트림을 구독하고 비디오 렌더링 컨트롤을 바인딩합니다mTRTCCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, view);} else {// 원격 사용자의 비디오 스트림 구독을 중지하고 렌더링 컨트롤을 릴리스합니다mTRTCCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG);}}
- (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available {// 원격 사용자가 자신의 오디오를 게시/취소합니다// 자동 구독 모드에서는 사용자가 아무런 작업을 하지 않아도 SDK가 원격 사용자의 오디오를 자동으로 재생합니다.}- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {// 원격 사용자가 메인 비디오 화면을 게시/취소합니다if (available) {// 원격 사용자의 비디오 스트림을 구독하고 비디오 렌더링 컨트롤을 바인딩합니다[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:self.remoteView];} else {// 원격 사용자의 비디오 스트림 구독을 중지하고 렌더링 컨트롤을 릴리스합니다[self.trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeBig];}}
// 크로스 룸 연결을 종료합니다mTRTCCloud.DisconnectOtherRoom();// 크로스 룸 연결 종료 결과의 콜백@Overridepublic void onDisConnectOtherRoom(int errCode, String errMsg) {super.onDisConnectOtherRoom(errCode, errMsg);}
// 크로스 룸 연결을 종료합니다[self.trtcCloud disconnectOtherRoom];// 크로스 룸 연결 종료 결과의 콜백- (void)onDisconnectOtherRoom:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {}

{"SdkAppId": 1400000000,"RoomId": "A","RoomIdType": 1,"AgentParams": {"UserId": "A_Agent","UserSig": "eJwtjMEKgkAUAP9lz2Hv6b40oU...","MaxIdleTime": 50},"WithTranscoding": 1,"AudioParams": {"AudioEncode": {"Codec": 0,"SampleRate": 48000,"Channel": 2,"BitRate": 64}},"FeedBackRoomParams": [{"RoomId": "B","RoomIdType": 1,"UserId": "A_Feed","UserSig": "eJwtzEELgkAUBOD-sldD3745..."},{"RoomId": "N","RoomIdType": 1,"UserId": "A_Feed","UserSig": "eJwtzEELgkAUBOD-sldD3745..."}]}
{"SdkAppId": 1400000000,"RoomId": "B","RoomIdType": 1,"AgentParams": {"UserId": "B_Agent","UserSig": "eJwtjMEKgkAUAP9lz2Hv6b40oU...","MaxIdleTime": 50},"WithTranscoding": 1,"AudioParams": {"AudioEncode": {"Codec": 0,"SampleRate": 48000,"Channel": 2,"BitRate": 64}},"FeedBackRoomParams": [{"RoomId": "A","RoomIdType": 1,"UserId": "B_Feed","UserSig": "eJwtzEELgkAUBOD-sldD3745..."},{"RoomId": "N","RoomIdType": 1,"UserId": "B_Feed","UserSig": "eJwtzEELgkAUBOD-sldD3745..."}]}
{"SdkAppId": 1400000000,"RoomId": "N","RoomIdType": 1,"AgentParams": {"UserId": "N_Agent","UserSig": "eJwtjMEKgkAUAP9lz2Hv6b40oU...","MaxIdleTime": 50},"WithTranscoding": 1,"AudioParams": {"AudioEncode": {"Codec": 0,"SampleRate": 48000,"Channel": 2,"BitRate": 64}},"FeedBackRoomParams": [{"RoomId": "A","RoomIdType": 1,"UserId": "N_Feed","UserSig": "eJwtzEELgkAUBOD-sldD3745..."},{"RoomId": "B","RoomIdType": 1,"UserId": "N_Feed","UserSig": "eJwtzEELgkAUBOD-sldD3745..."}]}
솔루션 유형 | 솔루션 장점 | 솔루션 단점 | 방 및 인원의 제한 | 추천 사용 시나리오 |
두 사람 PK 호출 로직이 간단합니다 | 여러 사람 PK 호출 로직이 복잡합니다 | 단일 스트리머는 최대 다른 방의 9명 스트리머와 크로스 룸 PK가 가능합니다 | 두 개의 방 또는 단일 스트리머(2명) 크로스 룸 PK | |
순수 서버 측 방안, 클라이언트는 추가 처리 불필요합니다 | 추가적인 로봇으로 스트리밍 푸시/풀 및 혼합 스트리밍 비용이 존재합니다 | 최대 11개의 방에서 동시에 크로스 룸 PK를 진행할 수 있으며 각 방은 최대 16명의 스트리머가 동시에 크로스 룸 PK에 참여할 수 있습니다. | 여러 방, 여러 스트리머(여러 명) 간의 크로스 룸 PK, 순수 서버 측 관리 |
피드백