ScreenShare
Broadcast Extension에서 카카오 i 커넥트 라이브 서비스에 연결하기 위해 사용하는 클래스입니다. ScreenShare 클래스는 메서드로만 구성됩니다.
안내표ScreenShare 전체 목록
iOS 확장(Extension) 기능 동작을 위해서 Extension 설정이 필요합니다. 자세한 설명은 부록. Extension 사전 작업을 참고하시기 바랍니다.
클래스 | 대분류 | 메서드 | 설명 |
---|---|---|---|
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:
}
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
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()
}
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
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
}
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
sampleBuffer | CMSampleBuffer | 필수 |
공유할 화면의 비디오 프레임 버퍼 |
부록. Extension 사전 작업
iOS 확장(Extension) 기능 동작을 위해서 Extension 설정이 필요합니다.
App ID, App Group 설정하기
애플 개발자 사이트를 통해 앱과 익스텐션을 위한 번들 ID 생성하고 App Group을 정의합니다. 애플 개발자 사이트에 앱과 익스텐션을 위한 프로비저닝 프로파일을 등록하고, 프로젝트에 해당 프로파일을 설정합니다.
익스텐션 타깃 생성하기
-
프로젝트 Targets에서 새로운 타깃을 추가합니다.
-
iOS > Broadcast Upload Extension을 선택합니다.
-
익스텐션의 bundle identifier와 siging, App Groups를 설정합니다.
메인앱 백그라운드 모드 활성화하기
메인 앱의 백그라운드 모드를 활성화합니다.
-
Target > Capabilities 탭으로 이동합니다.
-
Background Modes를 추가하고, Voice over IP를 활성화합니다.
- Voice over IP를 선택하지 않은 경우 앱이 백그라운드 진입 시 연결이 종료됩니다.
그림백그라운드 모드 활성화
- Voice over IP를 선택하지 않은 경우 앱이 백그라운드 진입 시 연결이 종료됩니다.
익스텐션 Display Name 설정하기
메인 앱의 화면공유 picker에 표시할 이름을 설정합니다.
-
Target > General 탭으로 이동합니다.
-
Indentity를 열고, Display Name을 설정합니다.
- 일반적으로 메인앱 이름과 동일하게 변경하는 것을 권장합니다.
그림Display Name 설정
- 일반적으로 메인앱 이름과 동일하게 변경하는 것을 권장합니다.
익스텐션 핸들러 클래스 이름 변경하기
Extension의 RPBroadcastSampleHandler는 기본적으로 SampleHandler라는 클래스로 생성됩니다.
특정 클래스로 이름을 변경하려면 아래와 같이 설정합니다.
-
Xcode에서 Target > Info 탭으로 이동합니다.
-
NSExtension의 NSExtensionPrincipalClass 항목에서 이름을 변경합니다.
익스텐션 실행 요청하기
화면 공유를 위한 익스텐션은 Room에서 실행을 요청할 수 있습니다. Room 클래스의 requestScreenShare() 메서드는 앱 그룹과 번들 ID가 일치하는 익스텐션의 실행을 요청합니다. 일치하는 익스텐션이 있으면 Picker에 해당 목록이 표시되고, 사용자가 선택하면 해당 익스텐션이 실행됩니다.