リアルタイム画面共有(Windows)

最終更新日:2021-10-12 14:19:11

    Tencent Cloud TRTCは画面共有機能をサポートし、Windowsプラットフォームにおける画面共有はビッグストリーム共有とサブストリーム共有の2つのスキームをサポートします。

    • サブストリーム共有
      TRTCでは、画面共有のための「サブストリーム(substream)」という1チャネルのアップストリームのビデオストリームを個別にスタートできます。サブストリーム共有は、キャスターがカメラ画面とスクリーン画面の両方を同時にアップロードします。これはTencentMeetingの使用スキームであり、startScreenCapture インターフェースを呼び出す場合に、TRTCVideoStreamTypeパラメータをTRTCVideoStreamTypeSubに指定して、このモードをイネーブルできます。このストリーム画面を閲覧するには専用のstartRemoteSubStreamViewインターフェースを使用する必要があります。

    • ビッグストリーム共有
      TRTCでは、通常、カメラが動くチャネルを「ビッグストリーム(bigstream)」といい、ビッグストリーム共有は、カメラチャネルを使用して画面を共有します。このモードでは、キャスターは、アップストリームのカメラ画面、もしくはアップストリームのスクリーン画面のいずれかのアップストリームのビデオストリームを1チャンネルのみ有し、両者は相互に排他的です。startScreenCaptureインターフェースを呼び出す場合に、TRTCVideoStreamTypeパラメータをTRTCVideoStreamTypeBigに指定し、このモードをイネーブルできます。

    サポートするプラットフォーム

    iOS Android Mac OS Windows Electron WeChat Mini Program Chromeブラウザ
    ×

    依存するAPI

    API機能 C++バージョン C#バージョン Electronバージョン
    共有ターゲットの選択 selectScreenCaptureTarget selectScreenCaptureTarget selectScreenCaptureTarget
    画面共有を開始 startScreenCapture startScreenCapture startScreenCapture
    画面共有の一時停止 pauseScreenCapture pauseScreenCapture pauseScreenCapture
    画面共有のリカバー resumeScreenCapture resumeScreenCapture resumeScreenCapture
    画面共有の終了 stopScreenCapture stopScreenCapture stopScreenCapture

    共有ターゲットの取得

    getScreenCaptureSourcesを介して 共有可能なウィンドウのリストをリストアップでき、リストは出力パラメータ sourceInfoList を介して戻されます。

    説明:

    Windowsのデスクトップ画面もウィンドウの1つであり、デスクトップウィンドウ(Desktop)と呼ばれ、モニターが2台ある場合は、各モニターに対応するデスクトップウィンドウがあります。したがって、getScreenCaptureSourcesを介して返されるウィンドウリストにもDesktopウィンドウがあります。

    sourceInfoListの各sourceInfoが共有可能なターゲットは、次のフィールドのように説明されます。

    フィールド タイプ 意味
    type TRTCScreenCaptureSourceType キャプチャソースタイプ。指定タイプはウィンドウまたはスクリーン
    sourceId HWND ソースIDの収集
  • ウィンドウについては、当該フィールドにウィンドウのハンドル
  • を表示します。画面については、当該フィールドに画面ID
  • を表示します
    sourceName string ウィンドウ名。画面である場合は Screen0 Screen1...を返します
    thumbWidth int32 ウィンドウサムネイル幅
    thumbHeight int32 ウィンドウサムネイル高さ
    thumbBGRA buffer ウィンドウサムネイルのバイナリーbuffer
    iconWidth int32 ウィンドウアイコンの幅
    iconHeight int32 ウィンドウアイコンの高さ
    iconBGRA buffer ウィンドウアイコンのバイナリーbuffer

    上述の情報に基づき、ユーザーの選択のために共有できるターゲットを一覧表示するシンプルなリストページを実現できます。

    共有ターゲットの選択

    TRTC SDK は3種の共有モードをサポートしており、selectScreenCaptureTargetを介して指定できます:

    • 全画面の共有
      全スクリーンウィンドウの共有であり、マルチモニター分割画面をサポートします。1つのsourceInfoList中のtypeにTRTCScreenCaptureSourceTypeScreenのsourceパラメータを指定し、captureRectを{ 0, 0, 0, 0 }に設定する必要があります。

    • 指定領域の共有
      スクリーンの特定領域の共有であり、ユーザーが領域の位置座標を決定する必要があります。1つのsourceInfoList中のtypeにTRTCScreenCaptureSourceTypeScreenのsourceパラメータを指定し、captureRectを{ 100, 100, 300, 300 }などの非NULLに設定する必要があります。

    • 指定ウィンドウの共有
      ターゲットウィンドウのコンテンツの共有であり、ユーザーが共有したいウィンドウを指定する必要があります。1つのsourceInfoList中のtypeにTRTCScreenCaptureSourceTypeWindowのsourceパラメータを指定し、captureRectを{ 0, 0, 0, 0 }に設定する必要があります。

    説明:

    2つの追加パラメータ:

    • パラメータ captureMouse はマウスポインタをキャプチャするかどうかを指定するために使用されます。
    • パラメータhighlightWindow は共有するウィンドウを強調表示するかどうかを指定し、キャプチャされた画像に隠れた箇所がある場合、それを取り除くようユーザーに促します。この部分のUI特殊効果は、SDK内で実現されます。

    画面共有の開始

    • 共有ターゲットを選択した後、startScreenCaptureインターフェースを使用して画面共有を起動することができます。
    • 共有プロセスにおいても、selectScreenCaptureTargetを呼び出し、共有ターゲットを変更することができます。
    • pauseScreenCapturestopScreenCapture の違いは、pauseはスクリーンコンテンツのキャプチャを停止し、その瞬間の画面を一時停止するため、resumeするまで最後の画面がリモート側に表示され続けます。
      /**
      * \brief 7.5 【画面共有】画面共有の起動
      * \param:rendHwnd - プレビュー画面をロードするHWND
      */
      void startScreenCapture(HWND rendHwnd);
       /**
      * \brief 7.6 【画面共有】画面共有の一時停止
      */
      void pauseScreenCapture();
       /**
      * \brief 7.7 【画面共有】画面共有のリカバー
      */
      void resumeScreenCapture();
       /**
      * \brief 7.8 【画面共有】画面共有の終了
      */
      void stopScreenCapture();
    

    画質の設定

    setSubStreamEncoderParamインターフェースを介して解像度、ビットレートとフレームレートを含む画面共有の画面品質を設定できます。推奨する参考値を以下に提示します。

    解像度レベル 解像度 フレームレート ビットレート
    超高精細(HD+) 1920 × 1080 10 800kbps
    高精細(HD) 1280 × 720 10 600kbps
    標準(SD) 960 × 720 10 400kbps

    画面共有の確認

    • Mac / Windows画面共有の確認
      ルームにいるMac / Windowsユーザーが画面共有を起動し、サブストリームを介して共有を実行します。ルームにいるその他ユーザーはTRTCCloudDelegate中のonUserSubStreamAvailableイベントを介してこの通知を受け取ります。
      画面共有を確認したいユーザーはstartRemoteSubStreamViewインターフェースを介してリモートユーザーのサブストリーム画面のレンダリングを起動することができます。

    • Android / iOS画面共有の確認
      ユーザーがAndroid / iOSを介して画面共有を実行する場合は、メインストリームを介して共有を実行します。ルームにいるその他ユーザーはTRTCCloudDelegateの中のonUserVideoAvailableイベントを介してこの通知を受け取ります。
      画面共有を確認したいユーザーはstartRemoteViewインターフェースを介してリモートユーザーのメインストリーム画面のレンダリングを起動することができます。

    //サンプルコード:画面共有の画面を見る
    void CTRTCCloudSDK::onUserSubStreamAvailable(const char * userId, bool available)
    {
       LINFO(L"onUserSubStreamAvailable userId[%s] available[%d]\n", UTF82Wide(userId).c_str(), available);
      if (available)  {
            startRemoteSubStreamView(userId, hWnd);
      } else {
            stopRemoteSubStreamView(userId);
      }
    }
    

    よくあるご質問

    1つのルームで同時にいくつの画面を共有できますか。
    現在、1つのTRTCオーディオ・ビデオルームで共有できる画面は1つだけです。

    ウィンドウの共有(SourceTypeWindow)を指定し、ウィンドウのサイズが変化した場合は、ビデオストリームの解像度も変化しますか。
    デフォルトでは、SDK内で共有ウィンドウのサイズに従ってエンコーディングパラメータを自動的に調整します。
    解像度を固定する必要がある場合は、setSubStreamEncoderParamインターフェースを呼び出し画面共有のエンコーディングパラメータを設定するか、またはstartScreenCaptureを呼び出すときに、対応するエンコーディングパラメータを指定する必要があります。