본문으로 건너뛰기
Version: 7.0

커스텀 비디오 소스

기본적으로 PlanetKit은 영상 통화 시작 시 카메라 장치를 자동으로 감지하여 제어하며, 카메라에서 캡처한 비디오를 영상 통화에 사용합니다. 하지만 애플리케이션의 요구사항에 따라 이를 변경해야 할 필요가 있을 수 있습니다. 사용자의 비디오 대신 외부 소스에서 가져온 비디오를 화면에 보여주는 것이 한 가지 예입니다.

이러한 요구를 충족할 수 있도록 PlanetKit은 원하는 비디오 프레임을 직접 공급할 수 있는 커스텀 비디오 소스(custom video source) 기능을 제공합니다. 이 기능을 통해 사용자가 원하는 비디오 프레임을 직접 PlanetKit 모듈에 렌더링하고 상대방에게 전달할 수 있습니다.

Note

커스텀 비디오 소스를 사용하는 동안은 PlanetKit이 카메라 장치를 제어하지 않습니다.

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

활용 사례

아래와 같은 애플리케이션 요구사항이 있을 때 커스텀 비디오 소스를 활용하여 구현할 수 있습니다.

  • 영상 파일을 비디오 소스로 사용하고자 할 때
  • 라이브 이원 생중계나 웹 스트리밍을 받아서 비디오 소스로 사용하고자 할 때
  • 카메라 장치에 대한 제어를 PlanetKit에서 하지 않고 애플리케이션에서 직접 하고 싶을 때

구현 절차

커스텀 비디오 소스 기능을 구현하는 절차는 다음과 같습니다.

커스텀 비디오 소스 클래스 구현하기

CustomCamera를 상속받는 클래스를 만들고 메서드를 구현하세요.

class CustomVideoSource : public PlanetKit::CustomCamera {
public:
void OnStart() override {
// Start custom video source thread
m_videoThread = std::thread(&CustomVideoSource::VideoThreadProc, this);
}

void OnStop() override {
// Stop custom video source thread
m_bRunning = false;

if (m_videoThread.joinable()) {
m_videoThread.join();
}
}

void VideoThreadProc() {
m_bRunning = true;

const auto frameInterval = std::chrono::milliseconds(66); // ~15fps (1000ms / 15 = 66.67ms)
while (m_bRunning) {
// Read from file
PlanetKit::SVideoFrame sVideoFrame;

// Tick count as microseconds
sVideoFrame.llTick =
std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::steady_clock::now().time_since_epoch())
.count();

this->WriteFrameData(sVideoFrame);

// Maintain 15fps timing
std::this_thread::sleep_for(frameInterval);
}
}

private:
std::thread m_videoThread;
std::atomic<bool> m_bRunning = false;
};

커스텀 비디오 소스 사용하기

커스텀 비디오 소스를 사용하려면 구현한 커스텀 비디오 소스 객체를 인자로 CameraControllerChangeCamera()를 호출하세요.

class YourCameraManager {
// Change to custom video source
void SetCustomVideoSource() {
PlanetKit::CameraControllerPtr pCameraController =
PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
pCameraController->ChangeCamera(m_pYourCustomVideoSource);
}

...

private:
PlanetKit::CustomCameraPtr m_pYourCustomVideoSource =
PlanetKit::MakeAutoPtr<CustomVideoSource>();
};

커스텀 비디오 소스를 카메라로 되돌려 놓기

커스텀 비디오 소스를 카메라로 되돌려 놓으려면 카메라 객체를 인자로 CameraControllerChangeCamera()를 호출하세요.

class YourCameraManager {
...

// Change to camera device
void ChangeCamera() {
PlanetKit::CameraControllerPtr pCameraController =
PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();

PlanetKit::CameraInfoArray aCameraInfos;
pCameraController->GetCapturerInfo(aCameraInfos);

pCameraController->ChangeCamera(aCameraInfos.GetAt(0));
}

// Deselect camera
void DeselectCamera() {
PlanetKit::CameraControllerPtr pCameraController =
PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
pCameraController->ChangeCamera(nullptr);
}
};

관련 API

커스텀 비디오 소스 기능과 관련된 API는 다음과 같습니다.