프레젠테이션 - 화면 공유
프레젠테이션이란 발표자가 다른 참여자에게 슬라이드 같은 자료를 보여주기 위해 자신의 화면을 공유하는 것을 말합니다. 이 페이지에서는 통화 유형에 따라 프레젠테이션 기능을 사용하는 방법을 설명합니다.
지원 통화 유형 | 최소 SDK 버전 |
---|---|
1대1 통화, 그룹 통화(컨퍼런스) | PlanetKit 3.0 |
PlanetKit은 프레젠테이션 기능에 HD 해상도를 사용하므로, 클라이언트의 네트워크 상태가 권장 대역폭 이상일 때 최적화된 서비스를 이용할 수 있습니다.
1대1 통화 프레젠테이션
발표자는 PlanetKitCall
의 startMyScreenShare()
와 stopMyScreenShare()
를 호출해 프레젠테이션을 시작하거나 종료할 시점을 결정합니다.
관련 API
1대1 통화에서 화면 공유와 관련된 API는 다음과 같습니다. 여기서 카운터파트란 프레젠테이션을 보여줄 피어를 말합니다.
발표자 측 API | 설명 | 카운터파트 측 API | 설명 |
---|---|---|---|
startMyScreenShare() | 발표자가 화면 공유 시작 | onPeerScreenShareStarted | 발표자의 화면 공유가 시작됨 |
- | - | addPeerScreenShareView() | 애플리케이션이 생성한 뷰 인스턴스를 설정 |
stopMyScreenShare() | 발표자가 화면 공유 종료 | onPeerScreenShareStopped | 발표자의 화면 공유가 종료됨 |
- | - | removePeerScreenShareView() | 해제 전에 뷰 인스턴스 제거 |
카운터파트 측에서는 onPeerScreenShareStarted
이벤트를 받아 프레젠테이션이 시작되었음을 알게 되면 반드시 뷰 인스턴스를 생성하고 addPeerScreenShareView()
를 호출해 PlanetKit이 화면을 렌더링하게 해야 합니다.
프레젠테이션 비디오 데이터는 자동으로 피어에게 스트리밍됩니다.
1대1 통화 프레젠테이션 흐름
1대1 통화에서 프레젠테이션을 시작하는 흐름은 다음과 같습니다.
1대1 통화에서 프레젠테이션을 중지하는 흐름은 다음과 같습니다.
화면 공유 종료 이유
stopMyScreenShare()
를 호출할 때 애플리케이션 요구사항으로 정의한 이유 중 하나를 설정할 수 있습니다. 설정한 이유는 onPeerScreenShareStopped
이벤트가 전달합니다. 이 이유의 값은 정수형이므로 직접 이유와 값을 정의하고 서로 다른 플랫폼의 애플리케이션에서 일관되게 사용해야 합니다.
이유 필드를 사용하지 않으면 onPeerScreenShareStopped
의 hasReason
필드는 false
로 설정됩니다.
그룹 통화 프레젠테이션
발표자는 PlanetKitConference
의 startMyScreenShare()
와 stopMyScreenShare()
를 호출해 프레젠테이션을 시작하거나 종료할 시점을 결정합니다.
관련 API
그룹 통화에서 화면 공유와 관련된 API는 다음과 같습니다. 여기서 카운터파트란 그룹 통화에서 프레젠테이션을 보여줄 참여자를 말합니다.
발표자 측 API | 설명 | 카운터파트 측 API | 비고 |
---|---|---|---|
startMyScreenShare() | 발표자가 화면 공유 시작 | onScreenShareUpdated (state=ENABLED) | 발표자의 화면 공유가 시작됨 |
- | - | PlanetKitPeerControl 의 startScreenShare() | 화면 공유 뷰에 화면 공유 비디오 렌더링 시작 |
stopMyScreenShare() | 발표자가 화면 공유 종료 | onScreenShareUpdated (state=DISABLED) | 발표자의 화면 공유가 종료됨 |
- | - | PlanetKitPeerControl 의 stopScreenShare() | 화면 공유 뷰에서 화면 공유 비디오 렌더링 중지 |
changeMyScreenShareDestination() changeMyScreenShareDestinationToMainRoom() | 화면을 공유할 대상 서브그룹 변경 | onScreenShareUpdated (state=ENABLED) onScreenShareUpdated (state=DISABLED) | 특정 서브그룹으로의 화면 공유가 시작되거나 종료됨 |
피어의 화면 공유 뷰에서 화면 공유 비디오를 제어하기 위해 PlanetKitPeerControl
의 메서드를 사용할 수 있습니다. 화면 공유 비디오 제어를 위해 PlanetKitPeerControl
을 사용하는 방법에 대한 자세한 내용은 그룹 통화 화면 공유 예제 코드를 참조하세요.
ConferenceListener
의 onScreenShareUpdated
이벤트 또는 PeerControlListener
의 onScreenShareUpdated
이벤트를 받아 프레젠테이션이 시작되었음을 알게 되면(state=ENABLED), 카운터파트 측에서는 반드시 PlanetKitPeerControl
의 startScreenShare()
를 호출해 PlanetKit이 화면을 렌더링하게 해야 합니다.
1대1 통화와 달리 프레젠테이션 비디오 데이터를 자동으로 참여자들에게 스트리밍하지 않습니다. 따라서 그룹 통화의 카운터파트 측에서는 공유 화면 비디오를 수신하기 위해 반드시 PlanetKitPeerControl
의 startScreenShare()
를 호출해야 합니다.
그룹 통화 프레젠테이션 흐름
그룹 통화에서 프레젠테이션을 시작하는 흐름은 다음과 같습니다.
그룹 통화에서 프레젠테이션을 중지하는 흐름은 다음과 같습니다.
그룹 통화에서 프레젠테이션이 시작된 후 참여한 사용자의 흐름은 다음과 같습니다.
서브그룹 내 프레젠테이션
dataSession 속성을 true
로 설정하고 서브그룹에 가입하면 서브그룹 내에서 프레젠테이션을 사용할 수 있습니다. 서브그룹 범위 내에서 프레젠테이션을 시작하면 프레젠테이션 비디오 데이터는 서브그룹 멤버에게만 공유됩니다.
화면 공유 대상 서브그룹을 변경하려면 changeMyScreenShareDestination()
또는 changeMyScreenShareDestinationToMainRoom()
을 사용하세요. 자세한 내용은 서브그룹 흐름 - 화면 공유를 참조하세요.
PlanetKit 4.1부터 동시에 2개 화면을 공유받는 기능을 지원합니다. 프레젠테이션 비디오를 2개 받으면 UX가 혼란스러워지거나 트래픽이 많아질 수 있지만, 서브그룹 기능과 관련해서 유용하게 쓸 수 있습니다.
예를 들어, 첫 번째 발표자가 모든 참여자에게 프레젠테이션을 진행하고, 두 번째 발표자가 서브그룹 범위로 프레젠테이션을 진행한다고 생각해 봅시다. 서브그룹 멤버는 PlanetKitPeerControl
의 startScreenShare()
를 조절해서 그중 한 화면을 받거나 둘 다 받는 것을 선택할 수 있습니다.
그룹 통화 호환성
PlanetKit 4.1부터 참여자에게 자동으로 프레젠테이션 비디오를 전송하지 않는 방법을 도입했습니다. 이를 위해 PlanetKit 4.1부터는 onScreenShareUpdated
와 requestPeerScreenShare()
를 추가하고 서브그룹 범위 내 프레젠테이션 기능을 지원합니다.
이 기능은 서브그룹 기능을 제공하지 않는 WebPlanetKit과 PlanetKit 예전 버전의 작동에는 영향을 주지 않습니다. 즉, WebPlanetKit이나 PlanetKit 4.1 미만을 사용하는 클라이언트에는 LINE Planet Cloud가 자동으로 프레젠테이션 비디오 데이터를 스트리밍합니다.