Kakao i Connect Live::Kakao i Connect Live 2.0::API 레퍼런스::iOS::ScreenShare

페이지 이동경로

ScreenShare

Broadcast Extension에서 카카오 i 커넥트 라이브 서비스에 연결하기 위해 사용하는 클래스입니다. ScreenShare 클래스는 메서드로만 구성됩니다.

안내
iOS 확장(Extension) 기능 동작을 위해서 Extension 설정이 필요합니다. 자세한 설명은 부록. Extension 사전 작업을 참고하시기 바랍니다.
ScreenShare 전체 목록
클래스 대분류 메서드 설명
ScreenShare Method start() Room에 접속하고 송출 시작
stop() 화면공유 중단
pause() 일시적으로 화면공유 중지
resume() 화면공유 일시 중지를 해제
sendVideoframe() 캡처한 로컬 화면을 Room으로 송출하기 위해 SDK로 전달

Method

start()

Room에 접속하고, 송출을 시작합니다.

코드예제start() Syntax

let screenShare = try ConnectLive.createScreenShare(appGroup: "appGroup")
screenShare.start() { error, message in
	switch error {
	case .invalidData:
	case .stopBroadcast:
	case .meetingFinished:
	case .broadcastFailed:
	case .broadcastClosed:
}

start() Parameters
파라미터 타입 필수 여부 설명
completion ErrorCallback 필수 방송 송출에 대한 이벤트 Callback
invaliData: 유효하지 않은 데이터
stopBroadcast: 방송 중단
meetingFinished: 회의 중단
broadcastFailed: 방송 오류
broadcastClosed: 방송 오류로 인한 중단

stop()

화면 공유를 중단합니다. Extension의 broadcastFinished() 메서드에서 stop() 메서드를 호출하는 경우 중지 작업 없이 화면이 바로 종료되므로, 화면이 중지되고 종료될 수 있도록 예외처리를 추가해야 합니다.

코드예제stop() Syntax

var semaphore = DispatchSemaphore(value: 0)

override func boradcastFinished() {
	screenShare.stop { [weak self] in
		self?.semaphore.signal()
	}

	semaphore.wait()
}

stop() Parameters
파라미터 타입 필수 여부 설명
completion () -> Void 필수 종료 완료 Callback

pause()

일시적으로 화면 공유를 중지합니다.

코드예제pause() Syntax

override func broadcastPaused() {
	screenShare.pause()
}

resume()

화면 공유 일시 중지를 해제합니다.

코드예제resume() Syntax

override func broadcastResumed() {
	screenShare.resume()
}

sendVideoFrame()

캡처한 로컬 화면을 Room으로 송출하기 위해 SDK로 전달합니다.

코드예제sendVideoFrame() Syntax

override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
	switch sampleBufferType {
	case RPSampleBufferType.video:
		screenShare.sendVideoFrame(sampleBuffer, sampleBuffer)

	case RPSampleBufferType.audioApp:
		break

	case RPSampleBufferType.audioMic:
		break
}

sendVideoFrame() Parameters
파라미터 타입 필수 여부 설명
sampleBuffer CMSampleBuffer 필수 공유할 화면의 비디오 프레임 버퍼

부록. Extension 사전 작업

iOS 확장(Extension) 기능 동작을 위해서 Extension 설정이 필요합니다.

App ID, App Group 설정하기

애플 개발자 사이트를 통해 앱과 익스텐션을 위한 번들 ID 생성하고 App Group을 정의합니다. 애플 개발자 사이트에 앱과 익스텐션을 위한 프로비저닝 프로파일을 등록하고, 프로젝트에 해당 프로파일을 설정합니다.

익스텐션 타깃 생성하기

  1. 프로젝트 Targets에서 새로운 타깃을 추가합니다.

  2. iOS > Broadcast Upload Extension을 선택합니다.

  3. 익스텐션의 bundle identifier와 siging, App Groups를 설정합니다.

메인앱 백그라운드 모드 활성화하기

메인 앱의 백그라운드 모드를 활성화합니다.

  1. Target > Capabilities 탭으로 이동합니다.

  2. Background Modes를 추가하고, Voice over IP를 활성화합니다.

    • Voice over IP를 선택하지 않은 경우 앱이 백그라운드 진입 시 연결이 종료됩니다. 백그라운드 모드 활성화 그림백그라운드 모드 활성화

익스텐션 Display Name 설정하기

메인 앱의 화면공유 picker에 표시할 이름을 설정합니다.

  1. Target > General 탭으로 이동합니다.

  2. Indentity를 열고, Display Name을 설정합니다.

    • 일반적으로 메인앱 이름과 동일하게 변경하는 것을 권장합니다. Display Name 설정 그림Display Name 설정

익스텐션 핸들러 클래스 이름 변경하기

Extension의 RPBroadcastSampleHandler는 기본적으로 SampleHandler라는 클래스로 생성됩니다.
특정 클래스로 이름을 변경하려면 아래와 같이 설정합니다.

  1. Xcode에서 Target > Info 탭으로 이동합니다.

  2. NSExtension의 NSExtensionPrincipalClass 항목에서 이름을 변경합니다.

익스텐션 실행 요청하기

화면 공유를 위한 익스텐션은 Room에서 실행을 요청할 수 있습니다. Room 클래스의 requestScreenShare() 메서드는 앱 그룹과 번들 ID가 일치하는 익스텐션의 실행을 요청합니다. 일치하는 익스텐션이 있으면 Picker에 해당 목록이 표시되고, 사용자가 선택하면 해당 익스텐션이 실행됩니다.

이 문서가 만족스러운 이유를 알려주세요.
이 문서에 아쉬운 점을 알려주세요.
평가해주셔서 감사합니다.

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