본문으로 건너뛰기
Version: 7.1

비디오 리시버

비디오 리시버 기능을 이용하면 실제 비디오 스트림에 영향을 주지 않고 비디오 데이터를 얻을 수 있습니다. 애플리케이션에서는 이 기능을 이용해 비디오 데이터의 복사본을 받아 다양한 용도로 사용할 수 있습니다.

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

활용 사례​

비디오 리시버의 주요 활용 사례는 다음과 같습니다.

  • 비디오 분석 및 품질 모니터링
  • 통화 분석 및 지표 수집
  • 섬네일 생성

구현 단계​

비디오 리시버 기능을 구현하려면 다음 단계를 따르세요.

로컬 사용자용 비디오 리시버​

로컬 사용자용 비디오 리시버 구현​

로컬 사용자의 비디오 데이터를 받기 위해 PlanetKitVideoOutputDelegate를 구현하는 클래스를 만드세요.

import PlanetKit

class LocalVideoReceiver: NSObject, PlanetKitVideoOutputDelegate {
func videoOutput(_ videoBuffer: PlanetKitVideoBuffer) {
// Access video buffer properties
let sampleBuffer = videoBuffer.sampleBuffer // CMSampleBuffer?: video sample buffer
let timestamp = videoBuffer.timestamp // CMTime: timestamp
let rotation = videoBuffer.rotation // PlanetKitVideoRotation: rotation angle
let position = videoBuffer.position // PlanetKitCameraPosition: camera position
let source = videoBuffer.source // PlanetKitVideoSource: video source
let sender = videoBuffer.sender // PlanetKitUserId?: sender (nil for local user)

// Extract pixel buffer from sample buffer if needed
guard let sampleBuffer = sampleBuffer,
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}

// Get video dimensions from pixel buffer
let width = CVPixelBufferGetWidth(pixelBuffer)
let height = CVPixelBufferGetHeight(pixelBuffer)

// Use the video buffer for your use case
// Note: The buffer is only valid during this callback
// Retain the sample buffer if you need it beyond this callback
}
}

비디오 리시버 설정​

비디오 데이터 수신을 시작하려면 로컬 비디오 스트림에 비디오 리시버를 등록하세요.

// For 1-to-1 call
let localReceiver = LocalVideoReceiver()
call.myVideoStream.addReceiver(localReceiver)

// For group call
let localReceiver = LocalVideoReceiver()
conference.myVideoStream.addReceiver(localReceiver)

비디오 리시버 해제​

비디오 수신을 중단하려면 비디오 리시버 등록을 해제하세요.

// For 1-to-1 call
call.myVideoStream.removeReceiver(localReceiver)

// For group call
conference.myVideoStream.removeReceiver(localReceiver)

피어용 비디오 리시버​

피어용 비디오 리시버 구현​

피어의 비디오 데이터를 받기 위해 PlanetKitVideoOutputDelegate를 구현하는 클래스를 만드세요.

import PlanetKit

class PeerVideoReceiver: NSObject, PlanetKitVideoOutputDelegate {
func videoOutput(_ videoBuffer: PlanetKitVideoBuffer) {
// Access video buffer properties
let sampleBuffer = videoBuffer.sampleBuffer // CMSampleBuffer?: video sample buffer
let timestamp = videoBuffer.timestamp // CMTime: timestamp
let rotation = videoBuffer.rotation // PlanetKitVideoRotation: rotation angle
let position = videoBuffer.position // PlanetKitCameraPosition: camera position
let source = videoBuffer.source // PlanetKitVideoSource: video source
let sender = videoBuffer.sender // PlanetKitUserId?: sender (identifies the peer)

// Extract pixel buffer from sample buffer if needed
guard let sampleBuffer = sampleBuffer,
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}

// Get video dimensions from pixel buffer
let width = CVPixelBufferGetWidth(pixelBuffer)
let height = CVPixelBufferGetHeight(pixelBuffer)

// Use the video buffer for your use case
// Note: The buffer is only valid during this callback
// Retain the sample buffer if you need it beyond this callback
}
}

비디오 리시버 설정​

1대1 통화와 그룹 통화에서 접근 방식이 다릅니다.

1대1 통화의 경우​

피어의 비디오 스트림에 비디오 리시버를 등록하세요.

let peerReceiver = PeerVideoReceiver()
call.peerVideoStream.addReceiver(peerReceiver)
그룹 통화의 경우​

특정 피어의 비디오를 수신하려면 PlanetKitPeerControl의 startVideo()를 비디오 리시버와 함께 호출하세요.

// Create the peer control instance for the target peer
guard let peerControl = conference.createPeerControl(peer: peer) else {
print("Failed to create peer control")
return
}

// Create receiver instance
let peerReceiver = PeerVideoReceiver()

// Start receiving video with specified maximum resolution
peerControl.startVideo(
maxResolution: .vga640x480,
delegate: peerReceiver,
subgroupName: nil
) { success in
if success {
print("Successfully started receiving peer video")
} else {
print("Failed to start receiving peer video")
}
}

// Alternative: Use the callback with resolution details
peerControl.startVideo(
maxResolution: .vga640x480,
delegate: peerReceiver,
subgroupName: nil
) { success, requestedResolution, receivedResolution, failReason in
if success {
print("Started receiving peer video")
print("Requested resolution: \(requestedResolution)")
print("Actual resolution: \(receivedResolution)")
} else {
print("Failed to start receiving peer video: \(failReason)")
}
}

비디오 리시버 해제​

1대1 통화의 경우​

피어의 비디오 스트림에서 비디오 리시버 등록을 해제하세요.

call.peerVideoStream.removeReceiver(peerReceiver)
그룹 통화의 경우​

피어로부터의 비디오 수신을 중단하려면 PlanetKitPeerControl의 stopVideo()를 호출하세요.

peerControl.stopVideo { success in
if success {
print("Successfully stopped receiving peer video")
} else {
print("Failed to stop receiving peer video")
}
}

관련 API​

비디오 리시버 기능과 관련된 API는 다음과 같습니다.

공통​

1대1 통화​

그룹 통화​