1대1 통화 화면 공유
1대1 통화에서 화면을 공유하는 예제 코드입니다.
송신 측 - 화면 캡처 준비 및 시작
-
1대1 통화에 참여한 후, 캡처할 수 있는 스크린(모니터) 및 윈도우(애플리케이션) 목록을 받으세요.
class YourApplication {
private:
PlanetKit::PlanetKitCall m_pCall;
}
void YourApplication::RefreshScreenShareList() {
PlanetKit::PlanetKitManagerPtr pManager = PlanetKit::PlanetKitManager::GetInstance();
PlanetKit::ScreenShareControllerPtr pController = pManager->GetScreenShareController();
PlanetKit::ScreenShareInfoArray arrScreenShare;
pController->GetScreenShareInfos(arrScreenShare);
} -
StartMyScreenShare()
를 호출해서 화면 캡처 전송을 시작하세요. 이때 캡처할 대상은 1단계에서 얻어 온 Array에서 선택할 수 있습니다.StartMyScreenShare()
호출 결과는ResultCallback
유형의 콜백 함수로 확인할 수 있으며, 성공했을 경우 렌더링을 위한 윈도우를 등록할 수 있습니다.void YourApplication::StartScreenShare(PlanetKit::ScreenShareInfoPtr pTarget) {
// This is result callback function.
auto callback = [](void* pUserData, bool bSuccess) {
// You can check result of `StartScreenShare` with parameter `bSuccess`.
if(bSuccess == true) {
// You can set rendering window.
YourApplication* pApp = (YourApplication*)pUserData;
pApp->m_pCall->AddMyScreenShareVideoView(pApp->m_hScreenShareRenderWnd);
}
};
// Start screen share.
bool bResult = m_pCall->StartMyScreenShare(
pTarget,
this,
callback
);
}
송신 측 - 화면 공유 종료
StopMyScreenShare()
를 호출해 화면 공유를 종료하고, 화면 캡처 준비 및 시작 2번 단계에서처럼 ResultCallback
유형의 콜백 함수로 결과를 확인하세요.
void YourApplication::StopScreenShare() {
...
// You can use callback parameter by using lambda function.
bool bResult = false = m_pCall->StopMyScreenShare(nullptr, [](void* pUserData, bool bSuccess) {
// You can check result of `StopMyScreenShare()` with the `bSuccess` parameter.
if(bSuccess == true) {
...
}
});
// Remove rendering window.
m_pCall->RemoveMyScreenShareVideoView(m_hScreenShareRenderWnd);
}
수신 측 - 화면 공유 업데이트 이벤트 수신
먼저 ICallEvent
의 OnPeerStartedScreenShare
와 OnPeerStoppedScreenShare
이벤트를 통해 상대방의 화면 공유가 시작 또는 중지되었는지 확인해야 합니다.
class CallEventListener : public PlanetKit::ICallEvent {
public:
void OnPeerStartedScreenShare(PlanetKit::PlanetKitCallPtr pPlanetKitCall) override {
std::wstring message = L"OnPeerStartedScreenShare";
OutputDebugStringW(message.c_str());
// Peer started screen share.
// You can start rendering peer's screen share.
StartRenderingPeerScreenShare();
}
void OnPeerStoppedScreenShare(PlanetKit::PlanetKitCallPtr pPlanetKitCall, bool bHasReason, int nUserReason) override {
std::wstring message = L"OnPeerStoppedScreenShare";
OutputDebugStringW(message.c_str());
// Peer stopped screen share.
// You can stop rendering peer's screen share.
StopRenderingPeerScreenShare();
}
};
수신 측 - 피어의 화면 공유 비디오 렌더링 시작
상대방의 화면 공유 비디오를 렌더링하려면 PlanetKitCall
의 AddPeerScreenShareVideoView()
를 호출하세요.
class YourApplication {
public:
void StartRenderingPeerScreenShare() {
m_pCall->AddPeerScreenShareVideoView(m_hScreenShareRenderWnd);
}
}
수신 측 - 피어의 화면 공유 비디오 렌더링 중단
상대방의 화면 공유 비디오의 렌더링을 중단하려면 PlanetKitCall
의 RemovePeerScreenShareVideoView()
를 호출하세요.
class YourApplication {
public:
void StopRenderingPeerScreenShare() {
m_pCall->RemovePeerScreenShareVideoView(m_hScreenShareRenderWnd);
}
}