Kakao i Connect Live::Kakao i Connect Live 2.0::API 레퍼런스::Android::Room

페이지 이동경로

Room

Room 클래스는 카카오 i 커넥트 라이브 SDK의 주요 클래스 중 하나입니다. 카카오 커넥트 라이브에서 Room은 서비스에 따라 회의실, 채팅방 등 스트리밍 서비스를 사용하는 공간을 의미합니다.
Room 클래스는 Provisionsing Scope의 Child Scope로 운영되므로, 메서드 호출 전 인증을 수행하는 signIn() 메서드를 먼저 호출해야 합니다. Room 클래스는 Property와 Method로 구성됩니다.

Room 클래스 전체 목록
클래스 구분 항목 설명
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}")

connect() Parameters
파라미터 타입 필수 여부 설명
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....])

subscribe() Parameters
파라미터 타입 필수 여부 설명
videoIds Collection<Int> 필수 Remote Participant의 비디오 ID

Returns

subscribe() Returns
반환 타입 필수 여부 설명
List<RemoteVideo> List<RemoteVideo> 선택 구독된 리모트 비디오 객체 리스트

unsubscribe()

내가 수신하고 있는 리모트 참여자의 비디오 아이디(videoIds)를 인자로 사용하여 해당 리모트 비디오의 수신(구독)을 중단합니다.

코드예제unsubscribe() Syntax

room.unsubscribe(videoIds = [1,2,3....])

unsubscribe() Parameters
파라미터 타입 필수 여부 설명
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)

publish() Parameters
파라미터 타입 필수 여부 설명
contents LocalContents 필수 Room에 송출할 로컬 참여자의 Video/Audio
preferFrontCamera를 true로 설정 시 전면 카메라 사용
preferFrontCamera를 false로 설정 시 후면 카메라 사용

unpublish()

Local Participant(로컬 참여자)가 Room에 송출 중인 로컬 미디어(비디오/오디오)의 공유를 취소합니다.

코드예제unpublish() Syntax

room.unpublish(contents)

unpublish() Parameters
파라미터 타입 필수 여부 설명
contents LocalContents 필수 Room에 송출할 로컬 참여자의 Video/Audio

getVideo()

특정 리모트 비디오 ID(videoId)를 인자로 사용하여, 해당 비디오가 속하는 리모트 비디오 객체를 반환합니다.

코드예제getVideo() Syntax

room.getVideo(videoId = 1)

getVideo() Parameters
파라미터 타입 필수 여부 설명
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> ->
	...
}

getStats() Parameters
파라미터 타입 필수 여부 설명
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)

subscribeStats() Parameters
파라미터 타입 필수 여부 설명
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)
}

getAudioLevels() Parameters
파라미터 타입 필수 여부 설명
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)

sendUserMessage() Parameters
파라미터 타입 필수 여부 설명
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
            )

Room.Config() Parameters
파라미터 타입 필수 여부 설명
videoReceiverInitialCount Integer 선택 영상 리시버가 부족한 경우 증가 단위
- 기본값: 10
videoReceiverGrowthRate Integer 선택 초기 영상 리시버 개수
- 기본값: 10
videoReceiverMaximumCount Integer 선택 최대 영상 리시버 개수
- 기본값: 50
이 문서가 만족스러운 이유를 알려주세요.
이 문서에 아쉬운 점을 알려주세요.
평가해주셔서 감사합니다.

더 자세한 의견은 documentation@kakaoenterprise.com 으로 제보해주세요.