본문으로 건너뛰기
Version: 6.0

1대1 통화 화면 공유

1대1 통화에서 화면 공유를 구현하는 예제 코드입니다.

송신 측 - 화면 공유 전송 시작

화면 공유를 시작하기 위한 코드 구현 방식은 다음과 같습니다.

화면 캡처 장치를 모으고 그중 하나를 선택하세요.

func collectCaptureDevices() -> [PlanetKitScreenCaptureDevice] {
var captureDevices = [PlanetKitScreenCaptureDevice]()
autoreleasepool {
for display in PlanetKitScreen.shared.displays {
let name: String
if let screen = NSScreen.screens.first(where: { $0.displayID == display.displayID }) {
name = screen.localizedName
}
...

captureDevices.append(PlanetKitScreenCaptureDevice(display: display))
}

let windows = PlanetKitScreen.shared.windows.filter {
$0.sharingType != .none &&
$0.alpha > 0 &&
$0.level == kCGNormalWindowLevel
}
let myAppId = Bundle.main.bundleIdentifier
for window in windows {
guard let image = window.image, window.sharingType != .none, window.bundleId != nil else {
continue
}
if myAppId == window.bundleId {
continue
}
...

captureDevices.append(PlanetKitScreenCaptureDevice(window: window))
}
}
return captureDevices
}

화면 공유 전송을 시작하려면 startMyScreenShare()를 호출하세요.

func startMyScreenShare(_ device: PlanetKitScreenCaptureDevice) {
...

call.startMyScreenShare(device: device) { success in
guard success else { return }
// UI code here if success
}
}

송신 측 - 화면 공유 전송 중지

화면 공유를 중지하기 위한 코드 구현 방식은 다음과 같습니다.

화면 공유를 중지하려면 stopMyScreenShare()를 호출하세요.

call.stopMyScreenShare() { success in
self.delegate?.screenShare(self, willDismiss: dismiss)
}

수신 측 - 화면 공유 업데이트 이벤트 수신

PlanetKitCallDelegatepeerDidStartScreenShare 또는 peerDidStopScreenShare 이벤트를 통해 피어의 화면 공유가 시작 혹은 중지됐는지 확인합니다.

extension VideoCallViewController: PlanetKitCallDelegate {
...
func peerDidStartScreenShare(_ call: PlanetKitCall) {
NSLog("peer screen share started")

// UI code here
DispatchQueue.main.async {
self.setPeerScreenShareEnabled(true)
}
}

func peerDidStopScreenShare(_ call: PlanetKitCall, reason: Int32) {
NSLog("peer screen share stopped")

// UI code here
DispatchQueue.main.async {
self.setPeerScreenShareEnabled(false)
}
}
}

수신 측 - 피어의 화면 공유 비디오 렌더링

peerDidStartScreenShare 이벤트가 발생한 후 화면 공유 뷰를 추가하여 공유 화면을 표시할 수 있습니다.

func setPeerScreenShareEnabled(_ enable: Bool) {
if enable {
let newView = PlanetKitMTKView(frame: view.bounds, device: nil)
view.addSubview(newView)
self.screenShareView = newView

call.addPeerScreenShareView(delegate: newView)
...
} else {
...
}
}

수신 측 - 피어의 화면 공유 비디오 제거

피어의 공유 화면을 렌더링하지 않으려면 PlanetKitCall에서 화면 공유 뷰를 제거하세요.

func setPeerScreenShareEnabled(_ enable: Bool) {
if enable {
...
} else {
if let oldView = screenShareView {
oldView.removeFromSuperview()
screenShareView = nil
call.removePeerScreenShareView(delegate: oldView)
}
}
}

관련 예제 코드

관련 문서