본문으로 건너뛰기
Version: 1.2

프레젠테이션 - 화면 공유

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

기능지원 통화 유형최소 SDK 버전
송신(화면 캡처 및 전송)1대1 통화, 그룹 통화(컨퍼런스)Android: 1.2
iOS: 1대1 통화 0.8, 그룹 통화 0.9
수신(상대 화면 공유 렌더링)1대1 통화, 그룹 통화(컨퍼런스)1대1 통화: 0.8
그룹 통화: 0.9
Note
  • 1.2 버전부터 화면 공유 캡처 및 전송은 Android와 iOS 모두에서 지원되지만, 플랫폼별 동작 방식이 다릅니다.
    • Android에서는 PlanetKit이 직접 화면을 캡처합니다. 애플리케이션이 startMyScreenShare()를 호출하면, PlanetKit이 시스템 화면 캡처 동의를 요청하고 미디어 프로젝션 포그라운드 서비스에서 캡처를 실행합니다.
    • iOS에서는 애플리케이션이 Broadcast Upload Extension을 통해 화면을 캡처하고, 통화 시작 시 설정한 ScreenShareKey를 사용해 NWConnection으로 PlanetKit에 스트림을 전송합니다.
  • 상대방의 화면 공유 수신은 양 플랫폼 모두 지원되며, 흐름은 동일합니다.
  • PlanetKit은 프레젠테이션 기능에 HD 해상도를 사용하므로, 클라이언트의 네트워크 상태가 권장 대역폭 이상일 때 최적화된 서비스를 이용할 수 있습니다.

Android​

필수 조건​

화면 캡처는 PlanetKit이 시작하는 포그라운드 서비스에서 실행되지만, 해당 서비스와 권한은 애플리케이션에서 선언해야 합니다. 앱의 AndroidManifest.xml에 다음을 추가하세요.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />

<application ...>
<service
android:name="com.example.planet_kit_flutter.screenshare.PlanetKitScreenShareService"
android:foregroundServiceType="mediaProjection"
android:exported="false" />
</application>

PlanetKit이 알림 채널을 생성하고 "Screen sharing" 진행 중 알림을 직접 게시하므로, 별도의 알림 설정은 필요하지 않습니다.

Note

포트 번호나 토큰을 정의할 필요가 없고, setScreenShareKey()를 호출할 필요도 없습니다. 이는 iOS 브로드캐스트 확장 흐름에서만 사용됩니다.

1대1 통화​

프레젠테이션 시작​

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

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

프레젠테이션 중지​

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

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

그룹 통화​

프레젠테이션 시작​

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

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

프레젠테이션 중지​

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

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

화면 공유가 자동으로 중지되는 경우​

사용자가 직접 중지하는 경우 외에도, 화면 캡처 모듈에서 오류가 보고되면 Android용 PlanetKit이 화면 공유를 중지합니다. 피어는 1대1 통화에서 onPeerScreenShareStopped로, 그룹 통화에서는 state=disabled가 포함된 onScreenShareUpdate로 알림을 받으며, 화면 공유 송신자는 state=disabled가 포함된 PlanetKitMyMediaStatusHandler.onScreenShareStateUpdate로 알림을 받습니다.

애플리케이션이 요청하지 않아도 화면 공유가 중지될 수 있으므로, UI는 startMyScreenShare()의 반환값만이 아니라 onScreenShareStateUpdate를 기준으로 업데이트하세요.

iOS​

필수 조건​

  • 애플리케이션은 화면 캡처를 위해 Broadcast Upload Extension 또는 동등한 기능을 구현해야 합니다.
    • Broadcast Upload Extension을 구현하려면 Xcode에서 프로젝트에 새 Target을 추가하고, "Broadcast Upload Extension" 템플릿을 선택한 뒤 확장을 활성화하세요.
  • 화면 공유 스트림 전송에 사용할 포트 번호, 수신 토큰, 송신 토큰을 정의하세요.

1대1 통화​

프레젠테이션 시작​

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

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

프레젠테이션 중지​

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

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

그룹 통화​

프레젠테이션 시작​

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

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

프레젠테이션 중지​

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

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

관련 API​

프레젠테이션 기능과 관련된 API는 다음과 같습니다.

1대1 통화​

메서드​

이벤트​

그룹 통화​

메서드​

이벤트​

관련 문서​

관련 예제 코드​