본문으로 건너뛰기
Version: 7.1

비디오 리시버

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

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

활용 사례​

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

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

구현 단계​

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

1대1 통화​

비디오 리시버 구현​

1대1 통화에서 비디오 데이터를 받기 위해 IVideoReceiver를 상속하는 클래스를 만드세요.

#include "PlanetKit.h"
#include "IVideoReceiver.h"

class VideoFrameReceiver : public PlanetKit::IVideoReceiver {
public:
void OnVideo(const PlanetKit::SVideoFrame& sVideoFrame, PlanetKit::UserIdPtr pUserID) override {
// Access video frame properties from SVideoFrame structure:
// - sVideoFrame.pbuffer: Pointer to the frame buffer
// - sVideoFrame.unBufferSize: Allocated buffer size
// - sVideoFrame.unDataLength: Actual length (in bytes) of buffer data
// - sVideoFrame.unWidth: Frame width in pixels
// - sVideoFrame.unHeight: Frame height in pixels
// - sVideoFrame.llTick: Tick count in microseconds
// - sVideoFrame.llTimeStamp: Timestamp
// - sVideoFrame.llDuration: Frame duration
// - sVideoFrame.eRotation: Rotation angle
// - sVideoFrame.bSubgroupMain: Whether frame belongs to main room
// - sVideoFrame.szSubgroupName: Subgroup name (if bSubgroupMain is false)

// For local user, pUserID's GetID() and GetServiceID() return empty strings
if (pUserID && !pUserID->GetID().empty()) {
// Peer's video frame
// Access peer information:
const PlanetKit::WString& userId = pUserID->GetID();
const PlanetKit::WString& serviceId = pUserID->GetServiceID();
} else {
// Local user's video frame
}

// Use the video frame for your use case

// Note: Copy data if you need it beyond this callback
}
};

비디오 리시버 설정​

비디오 데이터 수신을 시작하려면 PlanetKitCall(통화 중) 또는 CameraController(미리보기 모드, 로컬 비디오 전용) 인스턴스에 리시버를 등록하세요.

로컬 비디오(미리보기 모드)​
// Get camera controller instance
PlanetKit::CameraControllerPtr pCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

// Create receiver instance
PlanetKit::IVideoReceiverPtr pMyVideoReceiver = PlanetKit::MakeAutoPtr<VideoFrameReceiver>();

// Start preview with receiver
bool success = pCameraController->StartPreview(pMyVideoReceiver);
if (!success) {
// Handle error
}
로컬 비디오(통화 중)​
// Create receiver instance
PlanetKit::IVideoReceiverPtr pMyVideoReceiver = PlanetKit::MakeAutoPtr<VideoFrameReceiver>();

// Register receiver to get local video during call
bool success = m_pCall->AddMyVideoReceiver(pMyVideoReceiver);
if (!success) {
// Handle error
}
원격 비디오​
// Create receiver instance
PlanetKit::IVideoReceiverPtr pPeerVideoReceiver = PlanetKit::MakeAutoPtr<VideoFrameReceiver>();

// Register receiver to get peer's video
bool success = m_pCall->AddPeerVideoReceiver(pPeerVideoReceiver);
if (!success) {
// Handle error
}

비디오 리시버 해제​

비디오 데이터 수신을 중단하고 리소스를 정리하려면 리시버 등록을 해제하세요.

// For local video (preview)
pCameraController->StopPreview();

// For local video (during call)
bool success = m_pCall->RemoveMyVideoReceiver(pMyVideoReceiver);
if (!success) {
// Handle error
}

// For peer video
bool success = m_pCall->RemovePeerVideoReceiver(pPeerVideoReceiver);
if (!success) {
// Handle error
}

그룹 통화​

비디오 리시버 구현​

그룹 통화의 경우, 1대1 통화에서 사용한 것과 동일한 IVideoReceiver 인터페이스를 사용하세요.

비디오 리시버 설정​

비디오 데이터 수신을 시작하려면 PlanetKitConference(컨퍼런스 중) 또는 CameraController(미리보기 모드, 로컬 비디오 전용) 인스턴스에 리시버를 등록하세요. 피어 비디오의 경우 PeerControl API를 사용할 수도 있습니다.

로컬 비디오(미리보기 모드)​
// Get camera controller instance
PlanetKit::CameraControllerPtr pCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

// Create receiver instance
PlanetKit::IVideoReceiverPtr pMyVideoReceiver = PlanetKit::MakeAutoPtr<VideoFrameReceiver>();

// Start preview with receiver
bool success = pCameraController->StartPreview(pMyVideoReceiver);
if (!success) {
// Handle error
}
로컬 비디오(컨퍼런스 중)​
// Create receiver instance
PlanetKit::IVideoReceiverPtr pMyVideoReceiver = PlanetKit::MakeAutoPtr<VideoFrameReceiver>();

// Register receiver to get local video during conference
bool success = m_pConference->AddMyVideoReceiver(pMyVideoReceiver);
if (!success) {
// Handle error
}
원격 비디오(PlanetKitConference 사용)​
// Create receiver instance
PlanetKit::IVideoReceiverPtr pPeerVideoReceiver = PlanetKit::MakeAutoPtr<VideoFrameReceiver>();

// Create user ID for the target peer
std::wstring strPeerUserId = "peer id";
std::wstring strPeerServiceId = "peer service id";
PlanetKit::UserIdPtr pPeerId = PlanetKit::UserId::Create(strPeerUserId.c_str(), strPeerServiceId.c_str());

// Register receiver to get specific peer's video
bool success = m_pConference->AddPeerVideoReceiver(pPeerID, pPeerVideoReceiver);
if (!success) {
// Handle error
}
원격 비디오(PeerControl 사용)​
// Create an instance of PeerControl using PlanetKit::Peer::CreatePeerControl().
// For details, see https://docs.lineplanet.me/windows/getting-started/implement-first-group-video-call#create-a-peercontrol-instance.
PlanetKit::PeerControlPtr pPeerControl;

// Create receiver instance
PlanetKit::IVideoReceiverPtr pPeerVideoReceiver = PlanetKit::MakeAutoPtr<VideoFrameReceiver>();

// Register receiver through peer control
pPeerControl->RegisterReceiver(pPeerVideoReceiver);

비디오 리시버 해제​

비디오 데이터 수신을 중단하고 리소스를 정리하려면 리시버 등록을 해제하세요.

// For local video (preview)
pCameraController->StopPreview();

// For local video (during conference)
m_pConference->RemoveMyVideoReceiver(pMyVideoReceiver);

// For peer video (using PlanetKitConference)
m_pConference->RemovePeerVideoReceiver(pPeerVideoReceiver);

// For peer video (using PeerControl)
pPeerControl->DeregisterReceiver(pPeerVideoReceiver);

관련 API​

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

공통​

1대1 통화​

그룹 통화​