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);
}
}