본문으로 건너뛰기
Version: 5.5

프레젠테이션 - 화면 공유

프레젠테이션이란 발표자가 다른 참여자에게 슬라이드 같은 자료를 보여주기 위해 자신의 화면을 공유하는 것을 말합니다. 이 페이지에서는 통화 유형에 따라 프레젠테이션 기능을 사용하는 방법을 설명합니다.

지원 통화 유형최소 SDK 버전
1대1 통화, 그룹 통화(컨퍼런스)PlanetKit 3.0
Note

PlanetKit은 프레젠테이션 기능에 HD 해상도를 사용하므로, 클라이언트의 네트워크 상태가 권장 대역폭 이상일 때 최적화된 서비스를 이용할 수 있습니다.

1대1 통화 프레젠테이션

발표자는 PlanetKitCallStartMyScreenShare()StopMyScreenShare()를 호출해 프레젠테이션을 시작하거나 종료할 시점을 결정합니다.

관련 API

1대1 통화에서 화면 공유와 관련된 API는 다음과 같습니다. 여기서 카운터파트란 프레젠테이션을 보여줄 피어를 말합니다.

발표자 측 API설명카운터파트 측 API설명
StartMyScreenShare()발표자가 화면 공유 시작OnPeerStartedScreenShare발표자의 화면 공유가 시작됨
--AddPeerScreenShareVideoView()애플리케이션이 생성한 뷰 인스턴스를 설정
StopMyScreenShare()발표자가 화면 공유 종료OnPeerStoppedScreenShare발표자의 화면 공유가 종료됨
--RemovePeerScreenShareVideoView()해제 전에 뷰 인스턴스 제거

카운터파트 측에서는 OnPeerStartedScreenShare 이벤트를 받아 프레젠테이션이 시작되었음을 알게 되면 반드시 뷰 인스턴스를 생성하고 AddPeerScreenShareVideoView()를 호출해 PlanetKit이 화면을 렌더링하게 해야 합니다.

프레젠테이션 비디오 데이터는 자동으로 피어에게 스트리밍됩니다.

1대1 통화 프레젠테이션 흐름

1대1 통화에서 프레젠테이션을 시작하는 흐름은 다음과 같습니다.

1대1 통화 화면 공유 시작 시퀀스 다이어그램

1대1 통화에서 프레젠테이션을 중지하는 흐름은 다음과 같습니다.

1대1 통화 화면 공유 중지 시퀀스 다이어그램

화면 공유 종료 이유

StopMyScreenShare()를 호출할 때 애플리케이션 요구사항으로 정의한 이유 중 하나를 설정할 수 있습니다. 설정한 이유는 OnPeerStoppedScreenShare 이벤트가 전달합니다. 이 이유의 값은 정수형이므로 직접 이유와 값을 정의하고 서로 다른 플랫폼의 애플리케이션에서 일관되게 사용해야 합니다.

이유 필드를 사용하지 않으면 OnPeerStoppedScreenSharehasReason 필드는 false로 설정됩니다.

그룹 통화 프레젠테이션

발표자는 PlanetKitConferenceStartMyScreenShare()StopMyScreenShare()를 호출해 프레젠테이션을 시작하거나 종료할 시점을 결정합니다.

관련 API

그룹 통화에서 화면 공유와 관련된 API는 다음과 같습니다. 여기서 카운터파트란 그룹 통화에서 프레젠테이션을 보여줄 참여자를 말합니다.

발표자 측 API설명카운터파트 측 API비고
StartMyScreenShare()발표자가 화면 공유 시작OnPeerScreenShareUpdated
(state=ENABLED)
발표자의 화면 공유가 시작됨
--PeerControl::StartScreenShare()화면 공유 뷰에 화면 공유 비디오 렌더링 시작
StopMyScreenShare()발표자가 화면 공유 종료OnPeerScreenShareUpdated
(state=DISABLED)
발표자의 화면 공유가 종료됨
--PeerControl::StopScreenShare()화면 공유 뷰에서 화면 공유 비디오 렌더링 중지
ChangeMyScreenShareDestination()
ChangeMyScreenShareDestinationToMainRoom()
화면을 공유할 대상 서브그룹 변경OnPeerScreenShareUpdated
(state=ENABLED)
OnPeerScreenShareUpdated
(state=DISABLED)
특정 서브그룹으로의 화면 공유가 시작되거나 종료됨
Note

피어의 화면 공유 뷰에서 화면 공유 비디오를 제어하기 위해 PeerControl의 메서드를 사용할 수 있습니다. 화면 공유 비디오 제어를 위해 PeerControl을 사용하는 방법에 대한 자세한 내용은 그룹 통화 화면 공유 예제 코드를 참조하세요.

IConferenceEvent::OnPeerScreenShareUpdated 이벤트 또는 IPeerControlEvent::OnScreenShareUpdated 이벤트를 받아 프레젠테이션이 시작되었음을 알게 되면(state=ENABLED), 카운터파트 측에서는 반드시 PeerControl::StartScreenShare()를 호출해 PlanetKit이 화면을 렌더링하게 해야 합니다.

Note

1대1 통화와 달리 프레젠테이션 비디오 데이터를 자동으로 참여자들에게 스트리밍하지 않습니다. 따라서 그룹 통화의 카운터파트 측에서는 공유 화면 비디오를 수신하기 위해 반드시 PeerControl::StartScreenShare()를 호출해야 합니다.

그룹 통화 프레젠테이션 흐름

그룹 통화에서 프레젠테이션을 시작하는 흐름은 다음과 같습니다.

그룹 통화 화면 공유 시작 시퀀스 다이어그램

그룹 통화에서 프레젠테이션을 중지하는 흐름은 다음과 같습니다.

그룹 통화 화면 공유 중지 시퀀스 다이어그램

그룹 통화에서 프레젠테이션이 시작된 후 참여한 사용자의 흐름은 다음과 같습니다.

그룹 통화 화면 공유 시작 후 참여한 사용자 시퀀스 다이어그램

서브그룹 내 프레젠테이션

dataSession 속성을 true로 설정하고 서브그룹에 가입하면 서브그룹 내에서 프레젠테이션을 사용할 수 있습니다. 서브그룹 범위 내에서 프레젠테이션을 시작하면 프레젠테이션 비디오 데이터는 서브그룹 멤버에게만 공유됩니다.

화면 공유 대상 서브그룹을 변경하려면 ChangeMyScreenShareDestination() 또는 ChangeMyScreenShareDestinationToMainRoom()을 사용하세요. 자세한 내용은 서브그룹 흐름 - 화면 공유를 참조하세요.

Tip

PlanetKit 4.1부터 동시에 2개 화면을 공유받는 기능을 지원합니다. 프레젠테이션 비디오를 2개 받으면 UX가 혼란스러워지거나 트래픽이 많아질 수 있지만, 서브그룹 기능과 관련해서 유용하게 쓸 수 있습니다.

예를 들어, 첫 번째 발표자가 모든 참여자에게 프레젠테이션을 진행하고, 두 번째 발표자가 서브그룹 범위로 프레젠테이션을 진행한다고 생각해 봅시다. 서브그룹 멤버는 PeerControl::StartScreenShare()를 조절해서 그중 한 화면을 받거나 둘 다 받는 것을 선택할 수 있습니다.

그룹 통화 호환성

PlanetKit 4.1부터 참여자에게 자동으로 프레젠테이션 비디오를 전송하지 않는 방법을 도입했습니다. 이를 위해 PlanetKit 4.1부터는 OnPeerScreenShareUpdatedRequestPeerScreenShare()를 추가하고 서브그룹 범위 내 프레젠테이션 기능을 지원합니다.

이 기능은 서브그룹 기능을 제공하지 않는 WebPlanetKit과 PlanetKit 예전 버전의 작동에는 영향을 주지 않습니다. 즉, WebPlanetKit이나 PlanetKit 4.1 미만을 사용하는 클라이언트에는 LINE Planet Cloud가 자동으로 프레젠테이션 비디오 데이터를 스트리밍합니다.

데스크톱 고려 사항

데스크톱 애플리케이션에서는 발표자가 모니터 전체 화면 또는 애플리케이션의 창을 선택할 수 있게 합니다. 따라서 Windows와 macOS 애플리케이션에서는 StartMyScreenShare()를 호출하기 전에 어떤 화면을 공유할지 결정해야 합니다. 사용할 수 있는 화면 목록은 PlanetKit이 제공합니다. 예제 코드에서 해당 내용을 확인하세요.

발표자가 슬라이드 쇼를 실행하는 등 뷰를 변경할 때는 아래와 같은 API를 호출해야 합니다.

OS관련 API
macOSPlanetKitScreenchange(device:completion:)
WindowsScreenShareController::StartScreenShareCapture()

관련 문서

관련 예제 코드