Misc
표Misc 관련 전체 목록대분류 | 구분 | 항목 | 설명 |
---|---|---|---|
AudioHelper | Property | isFocusAcquired | SDK에서 Audio를 관리하기 위해 acquireFocus() 메서드로 요청이 되었는지 상태를 확인 |
availableDevices | 현재 유효한 오디오 장치 목록 | ||
selectedDevice | 현재 선택된 오디오 장치 | ||
Method | acquireFocus() | AudioHelper 클래스에 오디오 포커스를 요청 | |
releaseFocus() | 앱에서 SDK의 상 시나리오가 종료 시, 오디오 포커스 요청을 취소 | ||
prefer() | 해당 오디오 디바이스에 가장 높은 우선권을 부여 | ||
avoid() | 해당 오디오 디바이스에 가장 낮은 우선권을 부여 | ||
resetPreferences() | 오디오 장치 우선권을 변경한 경우, SDK 기본 설정대로 설정을 초기화 | ||
VideoCapturerFactory. CreateScreenCapture |
- | - | 화면 공유 요청을 Activity Result API로 처리하기 용이하도록 제공된 ActivityResultContract |
VideoCapturerConfig | Property | default | 로컬 카메라 캡처에 사용되는 기본 해상도 |
maxScreenSize | 화면 넓은 면의 최대 크기 값보다 더 큰 화면은 종횡비를 유지하면서 다운스케일 | ||
VideoRenderer | Property | frameInfo | VideoFrame의 FPS, 크기, 회전 정보를 나타냄 |
Event | onFrameInfoListener | VideoFrame 관련 정보(FPS, 크기, 회전)를 제공받을 callback | |
Method | bind() | 영상 프레임을 받아볼 VideoContent를 VideoRenderer 클래스에 바인드 | |
unbind() | 해당 VideoRenderer 클래스에서 수신 중인 영상 프레임의 바인드를 해제하여 수신 취소 | ||
setRenderingChecker() | 영상 프레임이 렌더링되는 상태를 조회 |
AudioHelper
AudioHelper 클래스는 오디오 포커스 및 장치 우선권을 제어하는 유틸리티 모듈입니다. AudioHelper 클래스는 Property와 Method로 구성됩니다.
Property
표AudioHelper 프로퍼티 목록프로퍼티 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
isFocusAcquired | Boolean | 선택 |
SDK에서 Audio를 관리하기 위해 acquireFocus() 메서드로 요청이 되었는지 상태 확인 |
true : 정상 동작 중 |
|||
false : 시작되지 않았거나 종료 |
|||
availableDevices | LiveData<List<AudioHelper.Device>> | 선택 |
현재 유효한 오디오 장치 목록 |
selectedDevice | LiveData<AudioHelper.Device?> | 선택 |
현재 선택된 오디오 장치 |
Method
AudioHelper 클래스의 메서드는 다음과 같습니다.
acquireFocus()
SDK에서 오디오를 관리하기 위해 AudioHelper 클래스에 오디오 포커스를 요청합니다. 파라미터인 streamType
, audioMode
의 경우 기본값 사용을 권장하며, onCallModeChange
의 경우 acquireFocus
이후 통화 상태에 따라 이벤트가 발생합니다.
코드예제acquireFocus() Syntax
// 기본 사용법
AudioHelper.acquireFocus(context = this)
// or...
// streamType, audioMode 는 기본값 사용 권장.
AudioHelper.acquireFocus(
context = this,
streamType = AudioManager.STREAM_VOICE_CALL,
audioMode = AudioManager.MODE_IN_COMMUNICATION,
onCallModeChange = Consumer { inCall ->
//...
}
)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
context | Context | 필수 |
getSystemService를 하기 위한 콘텍스트 |
streamType | Integer | 선택 |
볼륨 스트림 - AudioManager.STREAM_VOICE_CALL(기본값) 사용 권장 |
audioMode | Integer | 선택 |
오디오 모드 - AudioManager.MODE_IN_COMMUNICATION(기본값) 사용 권장 |
onCallModeChange | (Boolean) → Unit | 선택 |
통화 상태 변화에 대한 콜백 |
true : 통화 중 |
|||
false : 통화 중이 아님 |
releaseFocus()
앱에서 ConnectLive Android SDK의 사용 시나리오 종료 시, releaseFocus() 메서드를 통해 오디오 포커스 요청을 취소해야 합니다.
코드예제releaseFocus() Syntax
AudioHelper.releaseFocus()
prefer()
해당 오디오 디바이스에 가장 높은 우선권을 부여합니다. AudioHelper 클래스에 디바이스의 기본 우선순위가 정의되어 있습니다. 따라서 강제로 오디오 디바이스의 우선순위를 변경하는 경우가 아니라면, 해당 메서드의 호출을 지양합니다.
코드예제prefer() Syntax
AudioHelper.prefer(device = AudioHelper.Device.BLUETOOTH)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
device | AudioHelper.Device | 필수 |
높은 우선순위를 부여할 디바이스 타입 |
SPEAKER_PHONE : 안드로이드 디바이스의 스피커폰 |
|||
WIRED_HEADSET : 유선 이어폰 |
|||
EARPIECE : 통화 시 귀에 닿는 스피커 |
|||
BLUETOOTH : 블루투스 이어폰 |
avoid()
해당 오디오 디바이스에 가장 낮은 우선권을 부여합니다. AudioHelper 클래스에 디바이스의 기본 우선순위가 정의되어 있습니다. 따라서 강제로 오디오 디바이스의 우선순위를 변경하는 경우가 아니라면, 해당 메서드의 호출을 지양합니다.
코드예제avoid() Syntax
AudioHelper.avoid(device = AudioHelper.Device.EARPIECE)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
device | AudioHelper.Device | 필수 |
낮은 우선순위를 부여할 디바이스 타입 |
SPEAKER_PHONE : 안드로이드 디바이스의 스피커폰 |
|||
WIRED_HEADSET : 유선 이어폰 |
|||
EARPIECE : 통화 시 귀에 닿는 스피커 |
|||
BLUETOOTH : 블루투스 이어폰 |
resetPreferences()
prefer() 또는 avoid() 메서드를 통해 오디오 장치 우선권을 변경한 경우, SDK 기본 설정대로 설정을 초기화합니다.
코드예제resetPreferences() Syntax
AudioHelper.resetPreferences()
VideoCapturerFactory.CreateScreenCapture
화면 공유 요청을 Activity Result API로 처리하기 용이하도록 제공된 ActivityResultContract입니다. 앱 구성에 맞춰서 Intent, localScreen을 관리하는 것을 권장합니다.
코드예제VideoCapturerFactory.CreateScreenCapture Syntax
registerForActivityResult(VideoCapturerFactory.CreateScreenCapture) { data : Intent? ->
if (data != null) {
localScreen = ConnectLive.createLocalScreen(data)
room.publish(localScreen)
}
}.launch(Unit)
VideoCapturerConfig
로컬 비디오 캡처에 활용되는 설정으로 해상도와 화면 캡처의 최대 사이즈를 설정합니다. 기본값 사용을 권장합니다.
Property
표VideoCapturerConfig 프로퍼티 목록프로퍼티 | 타입 | 설명 |
---|---|---|
default | Size | 로컬 카메라 캡처에 사용되는 기본 해상도 |
VGA (기본값): 640 x 480 |
||
HD : 1280 x 720 |
||
maxScreenSize | Integer | 화면 넓은 면의 최대 크기 값보다 더 큰 화면은 종횡비를 유지하면서 다운스케일 - 기본값: 1280 |
VideoRenderer
SurfaceView를 상속받고 있으며, VideoContent의 bind를 제공하는 클래스입니다. VideoRenderer가 화면에서 차지하는 비율에 따라 최적화를 위해 자동으로 화질변경을 수행합니다. 또한 VideoRenderer의 화면 노출 여부에 따라 attach, detach를 함으로써 편리함과 최적화를 제공합니다
Property
표VideoRenderer 프로퍼티 목록프로퍼티 | 타입 | 설명 |
---|---|---|
frameInfo | SharedFlow<Map<StringAny>> | VideoFrame의 FPS, 크기, 회전 정보를 나타냄 |
onFrameInfoListener | ((Map<String Any>) -> Unit)? | VideoFrame 관련 정보(FPS, 크기, 회전)를 제공받을 callback |
Method
bind()
영상 프레임을 받아볼 VideoContent를 VideoRenderer 클래스에 바인드합니다.
코드예제bind() Syntax
videoRenderer.bind(content = LocalVideo,RemoteVideo)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
content | VideoContent | 선택 |
영상 프레임을 받아볼 콘텐츠 |
LocalVideo : 로컬 비디오 |
|||
RemoteVideo : 리모트 비디오 |
unbind()
해당 VideoRenderer 클래스에서 수신 중인 영상 프레임의 바인드를 해제하여 수신 취소합니다.
코드예제unbind() Syntax
videoRenderer.unbind()
setRenderingChecker()
영상 프레임이 렌더링되는 상태를 조회합니다. interval 동안 그려지는 프레임이 있을 경우 active가 호출되며, 그려지는 프레임이 없는 경우 inactive가 호출됩니다.
코드예제setRenderingChecker() Syntax
videoRenderer.setRenderingChecker(5000L,
active = {
...
},
inActive = {
...
}
)
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
interval | Long | 선택 |
해당 시간 동안 그려지는 프레임이 있는지 확인 - 기본값(권장) : 5000L(millisecond) |
active | () → Unit | 필수 |
정상적으로 렌더링 중 |
inActive | () → Unit | 필수 |
마지막 프레임이 그려진 interval 시간이 지나도록 새로운 프레임이 존재하지 않음 |