Room
Room 클래스는 카카오 i 커넥트 라이브 SDK의 주요 클래스 중 하나입니다. 카카오 커넥트 라이브에서 Room은 서비스에 따라 회의실, 채팅방 등 스트리밍 서비스를 사용하는 공간을 의미합니다.
Room 클래스는 Provisionsing Scope의 Child Scope로 운영되므로, 메서드 호출 전 인증을 수행하는 signIn() 메서드를 먼저 호출해야 합니다. Room 클래스는 Property와 Method로 구성됩니다.
클래스 | 구분 | 항목 | 설명 |
---|---|---|---|
Room | Property | localParticipant: LocalParticipant | Local Participant(로컬 참여자)의 정보를 담고 있는 객체 |
remoteParticipants: Map<String, RemoteParticipant> | Remote Participant(리모트 참여자)의 정보를 담고 있는 객체 | ||
(mutable property) isMuted: Boolean | 전체 리모트 참여자의 오디오를 무음으로 설정할지 여부 | ||
Method | connect() | roomId로 식별되는 특정 Room에 접속 | |
disconnect() | 현재 접속 중인 Room과 연결 끊음 | ||
subscribe() | Room의 Remote Participant(리모트 참여자)가 공유한 비디오 수신(구독) | ||
unsubscribe() | 내가 수신하고 있는 리모트 참여자의 비디오 아이디(videoIds)를 인자로 사용하여 해당 리모트 비디오의 수신(구독) 중단 | ||
publish() | Local Participant(로컬 참여자)가 생성한 로컬 미디어(비디오 / 오디오)를 다른 리모트 참여자들과 공유 | ||
unpublish() | Local Participant(로컬 참여자)가 Room에 송출 중인 로컬 미디어(비디오 / 오디오)의 공유 취소 | ||
getVideo() | 특정 리모트 비디오 ID(videoId)를 인자로 사용하여, 해당 비디오가 속하는 리모트 비디오 객체 반환 | ||
getStats() | PeerConnection을 대상으로 전송 중 또는 수신 중인 미디어에 대한 품질 지표를 확인할 수 있는 RTCStats을 가져옴 | ||
subscribeStats() | PeerConnection을 대상으로 전송 중 또는 수신 중인 미디어에 대한 품질 지표를 확인할 수 있는 RTCStats을 특정 간격으로 전달받음 | ||
getAudioLevels() | 특정 간격으로 현재 참여자들의 오디오 볼륨 레벨 반환 | ||
sendUserMessage() | Room에 있는 특정 리모트 참여자 또는 전체 리모트 참여자에게 메시지를 전송 | ||
Room.Config() | 해당 Room에서 영상 수신을 위한 운용 설정 수행 |
Property
표Room 프로퍼티 목록프로퍼티 | 타입 | 설명 |
---|---|---|
localParticipant: LocalParticipant | LocalParticipant | Local Participant(로컬 참여자)의 정보를 담고 있는 객체 |
remoteParticipants: Map<String, RemoteParticipant> | Map<String RemoteParticipant> | Remote Participant(리모트 참여자)의 정보를 담고 있는 객체 |
(mutable property) isMuted: Boolean | Boolean | 전체 리모트 참여자의 오디오를 무음으로 설정할지 여부 |
true : 전체 참여자의 오디오를 무음으로 설정 |
||
false (기본값): 전체 참여자의 오디오를 무음으로 설정하지 않음 |
Throws
인증을 수행하는 signIn() 메서드를 호출하지 않고, Room에 비정상적으로 접근했을 때 다음의 예외가 발생할 수 있습니다.
표Room Throws항목 | 설명 |
---|---|
IllegalStateException | 인증을 수행하는 signIn() 메서드를 호출하지 않은 상태에서 Room에 접근한 경우 |
Method
Room 클래스의 메서드는 다음과 같습니다.
connect()
roomId로 식별되는 특정 Room에 접속하고 스트림의 송신 및 수신을 위한 절차를 시작합니다.
코드예제connect() Syntax
room.connect(roomId = "{roomId}")
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
roomId | String | 필수 |
Room의 고유 아이디 - 영문 대소문자, 숫자, - 만 허용- 최대 길이: 32자 |
disconnect()
현재 접속 중인 Room과 연결을 끊습니다.
코드예제disconnect() Syntax
room.disconnect()
subscribe()
Room의 Remote Participant(리모트 참여자)가 공유한 비디오를 수신(구독)합니다. 시청하지 않고 데이터만 사용, 또는 별도의 Renderer
를 사용할 목적을 제외하고, subscribe() 메서드를 직접 호출하는 것은 권장하지 않습니다.
주의
카카오 i 커넥트 라이브 SDK에서는 RemoteVideo 클래스의 attach()와 detach() 메서드를 통해 리모트 참여자의 비디오를 자동으로 구독 및 해지합니다. VideoRenderer에서 가시성 변화에 따라 RemoteVideo의 attach() 또는 detach() 메서드가 자동으로 호출됩니다. 따라서 subscribe() 메서드를 직접 호출하는 것은 권장하지 않습니다.
코드예제subscribe() Syntax
room.subscribe(videoIds = [1,2,3....])
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
videoIds | Collection<Int> | 필수 |
Remote Participant의 비디오 ID |
Returns
표subscribe() Returns반환 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
List<RemoteVideo> | List<RemoteVideo> | 선택 |
구독된 리모트 비디오 객체 리스트 |
unsubscribe()
내가 수신하고 있는 리모트 참여자의 비디오 아이디(videoIds)를 인자로 사용하여 해당 리모트 비디오의 수신(구독)을 중단합니다.
코드예제unsubscribe() Syntax
room.unsubscribe(videoIds = [1,2,3....])
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
videoids | Collection<Int> | 필수 |
수신(구독)을 해제할 리모트 비디오 ID |
Returns
표unsubscribe() Returns반환 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
List<RemoteVideo> | List<RemoteVideo> | 선택 |
구독 해제한 리모트 비디오 객체 목록 |
publish()
Local Participant(로컬 참여자)가 생성한 로컬 미디어(비디오/오디오)를 다른 리모트 참여자들과 공유합니다.
코드예제publish() Syntax
val contents: LocalContents =
ConnectLive.createLocalMedia(preferFrontCamera, true).apply {
video?.isEnabled = true
audio?.isEnabled = true
}
room.publish(contents)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
contents | LocalContents | 필수 |
Room에 송출할 로컬 참여자의 Video/Audio |
preferFrontCamera를 true 로 설정 시 전면 카메라 사용 |
|||
preferFrontCamera를 false 로 설정 시 후면 카메라 사용 |
unpublish()
Local Participant(로컬 참여자)가 Room에 송출 중인 로컬 미디어(비디오/오디오)의 공유를 취소합니다.
코드예제unpublish() Syntax
room.unpublish(contents)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
contents | LocalContents | 필수 |
Room에 송출할 로컬 참여자의 Video/Audio |
getVideo()
특정 리모트 비디오 ID(videoId)를 인자로 사용하여, 해당 비디오가 속하는 리모트 비디오 객체를 반환합니다.
코드예제getVideo() Syntax
room.getVideo(videoId = 1)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
videoId | Integer | 필수 |
각 참여자가 송출하고 있는 영상의 고유한 Id 값 |
Returns
표getVideo() Returns반환 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
RemoteVideo | RemoteVideo | 선택 |
해당 videoId의 리모트 비디오 객체 |
getStats()
PeerConnection을 대상으로 전송 중 또는 수신 중인 미디어에 대한 품질 지표를 확인할 수 있는 RTCStats을 가져옵니다. PeerConnection은 로컬 컴퓨터와 리모트 피어 간의 WebRTC 연결을 의미합니다.
코드예제getStats() Syntax
room.getStats(up = true, down = true).thenApply { stats: Map<String,RTCStats> ->
...
}
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
up | Boolean | 선택 |
송출 전용 PeerConnection을 대상으로 RTCStats 수집 여부 설정 |
true (기본값): RTSStats를 가져옴 |
|||
false : RTSStats를 가져오지 않음 |
|||
down | Boolean | 선택 |
수신 전용 PeerConnection을 대상으로 RTCStats 수집 여부 설정 |
true (기본값): RTSStats를 가져옴 |
|||
false : RTSStats를 가져오지 않음 |
Returns
표getStats() Returns반환 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
CompletableFuture<Map<String, RTCStats>> | CompletableFuture<Map<String RTCStats>> | 필수 |
CompletableFuture로 구성된 비동기 통계 정보 |
subscribeStats()
PeerConnection을 대상으로 전송 중 또는 수신 중인 미디어에 대한 품질 지표를 확인할 수 있는 RTCStats을 특정 간격으로 전달받습니다.
코드예제subscribeStats() Syntax
val stats = room.subscribeStats(intervalInMillis = 5000L)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
intervalInMillis | Long | 선택 |
RTCStats를 전달받는 간격 - 기본값: 5000L(Millisecond) |
Returns
표subscribeStats() Returns반환 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
LiveData<Map<String, RTCStats>> | LiveData<Map<String RTCStats>> | 필수 |
주입한 주기(intervalInMillis)마다 RTCStats 정보를 업데이트 |
getAudioLevels()
특정 간격으로 현재 참여자들의 오디오 볼륨 레벨을 반환합니다. 고객 서비스에서는 주기적으로 이 값을 획득하여, 오디오 레벨을 표시하는 데 사용할 수 있습니다.
코드예제getAudioLevels() Syntax
room.getAudioLevels(intervalInMillis = 200L).observe(this) { audioLevels ->
updateAudioLevels(audioLevels)
}
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
intervalInMillis | Long | 선택 |
오디오 볼륨 레벨을 전달받는 주기 - 기본값: 200(Millisecond) - 주기를 너무 낮게 설정 시 디바이스에 부하가 생길 수 있어 기본값 사용 권장 |
Returns
표getAudioLevels() Returns반환 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
LiveData<Map<String, Int>> | LiveData<Map<String Int>> | 필수 |
참여자 ID가 키(Key)이며, 오디오 볼륨은 RTCStats에서 추출된 audioLevel의 값을 0~100 범위의 정수로 선형 변환하여 반환 - 100으로 가까울수록 높은 음량을 의미 - 자세한 설명은 WebRTC's Statistics API 참고 |
sendUserMessage()
Room에 있는 특정 리모트 참여자 또는 전체 리모트 참여자에게 메시지를 전송합니다.
코드예제sendUserMessage() Syntax
// 전체에게 보내기
room.sendUserMessage(message = message)
// 특정 참여자에게 보내기
room.sendUserMessage(message = message, targets = targets)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
target | String[] | 선택 |
메시지를 받을 리모트 참여자 아이디 배열 - 기본값 : emptypList() - 설정시 : [”target_pid”] 또는 [”target_pid”, ...] |
message | String/td> | 필수 |
전송할 메시지 |
Room.Config()
ConnectLive.createRoom
으로 Room을 생성할 때, 수신을 위한 운용 설정을 수행합니다. 기본 Config 값을 사용할 것을 권장하며, 기본값 사용 시 이 메서드를 호출하지 않아도 됩니다.
코드예제Room.Config() Syntax
config = Room.Config(
videoReceiverGrowthRate = 10,
videoReceiverInitialCount = 10,
videoReceiverMaximumCount = 50
)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
videoReceiverInitialCount | Integer | 선택 |
영상 리시버가 부족한 경우 증가 단위 - 기본값: 10 |
videoReceiverGrowthRate | Integer | 선택 |
초기 영상 리시버 개수 - 기본값: 10 |
videoReceiverMaximumCount | Integer | 선택 |
최대 영상 리시버 개수 - 기본값: 50 |