본문으로 건너뛰기
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 통화

메서드

이벤트

그룹 통화

메서드

이벤트

관련 문서

관련 예제 코드