본문으로 건너뛰기
Version: 7.0

비디오 모디파이어

비디오 모디파이어 기능을 사용하면 비디오 전송 전에 로컬 비디오 프레임을 수정할 수 있습니다. 이 기능을 통해 애플리케이션에서 실시간 이펙트, 필터 또는 변환을 송출 비디오 스트림에 적용할 수 있습니다.

지원되는 통화 유형최소 SDK 버전
1대1 통화, 그룹 통화(컨퍼런스)PlanetKit 7.0
Note
  • 비디오 모디파이어는 카메라에서 캡처한 로컬 비디오에만 적용됩니다.
  • 비디오 수정 처리 시 프레임 드롭 및 화질 저하를 방지하기 위해 연산 비용과 지연 시간을 최소화해야 합니다.

활용 사례

비디오 모디파이어의 주요 활용 사례는 다음과 같습니다.

  • 실시간 비디오 이펙트 및 필터
  • 뷰티 필터 및 얼굴 보정
  • 색상 보정 및 조정

구현 단계

비디오 모디파이어 기능을 구현하려면 다음 단계를 따르세요.

비디오 모디파이어 구현

비디오 프레임을 수정하기 위해 PlanetKitVideoModifierDelegate를 구현하는 클래스를 만드세요.

import PlanetKit

class VideoEffectModifier: NSObject, PlanetKitVideoModifierDelegate {
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

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

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

// Apply your custom effect and create a new sample buffer
guard let modifiedSampleBuffer = applyVideoEffect(
to: originalSampleBuffer,
width: width,
height: height
) else {
// If effect fails, keep original buffer
return
}

// Set the modified sample buffer back to the video buffer
videoBuffer.sampleBuffer = modifiedSampleBuffer
}

func didEncounterError(_ error: PlanetKitVideoModifierError) {
// Handle errors during video modification
switch error {
case .videoFrameRejectedByUpscaling:
print("Error: Video frame was upscaled (resolution increased)")
case .videoFrameRejectedByFormatChange:
print("Error: Video frame pixel format was changed")
@unknown default:
print("Error: Unknown video modifier error")
}
}

private func applyVideoEffect(
to sampleBuffer: CMSampleBuffer,
width: Int,
height: Int
) -> CMSampleBuffer? {
// Implement your video effect logic here
// Note: This runs on the camera capture thread, keep processing lightweight
}
}

비디오 모디파이어 설정

비디오 프레임 수정을 시작하려면 카메라 매니저에 모디파이어를 등록하세요.

// Get camera manager instance
let cameraManager = PlanetKitCameraManager.shared

// Create and set the modifier
let videoModifier = VideoEffectModifier()
cameraManager.modifier = videoModifier

비디오 모디파이어 해제

비디오 프레임 수정을 중단하려면 모디파이어 등록을 해제하세요.

let cameraManager = PlanetKitCameraManager.shared

// Clear the modifier by setting it to nil
cameraManager.modifier = nil

관련 API

비디오 모디파이어 기능과 관련된 API는 다음과 같습니다.