会議議案

この文書は,会議管理 (オーディオ/ビデオ) に行なう進化を記述することを目的としています. 目標は,SIP コールを統合してグリッドビューを提供する現在の実装を改善することです. 参加者がリストされている,独立した静止できる,またはビデオレイアウトを変更できる (参加者一人だけを示す) ビューです.

定義

  • ホスト: オーディオ/ビデオストリームを他のユーザーに混ぜるユーザーですか

  • 参加者:会議のすべてのユーザー,ホストでさえ

免責事項

この文書では,現在,最初のステップのみを記述しています. これは参加者全員に送信されたビデオミクサーの参加者と位置の識別を意味します.

可能なレイアウト

  • 格里:各メンバーが同じ高度/幅で表示される

  • ONE_BIG_WITH_SMALL: 1 つのメンバーが拡大され,他のプレビューが表示されます

  • ONE_BIG: 一人のメンバーがフルスクリーンレンダリングをします

コールマネジャーで会議のレイアウトを管理する新しい方法が2つあります:

/**
 * Change the conference layout
 * @param confId
 * @param layout    0 = matrix, 1 = one big, others in small, 2 = one in big
 */
void setConferenceLayout(const std::string& confId, int layout);

/**
 * Change the active participant (used in layout != matrix)
 * @param confId
 * @param participantId    If participantId not found, the local video will be shown
 */
void setActiveParticipant(const std::string& confId, const std::string& participantId);

実施

実行はかなり簡単です. すべては conference.cpp (参加者をソースにリンクする) と video_mixer.cpp (望んだレイアウトを表示する) によって管理されます.

シンクロレーション会議情報

注: 実際,参加者という単語は会議で混ざったコールIdに使用されます.これは最初にはAPIのいくつかの問題につながり,将来修正する必要があります

目的は,レンダリングされたビデオのメタデータについて参加者全員に知らせることです. つまり,会議に参加した者が誰であるか,ビデオがどこに位置しているかです.

会議の参加者が本人会議である場合,他の参加者に送信されたときに入ってくるレイアウト情報が統合されるべきである.会議に送信されたときにレイアウト情報が統合されるべきではない.

レイアウト情報

レイアウトはクライアントおよび内部に以下の形式のベクトル でVectorMapStringStringとして保存されます.

Layout = {
    {
        "uri": "participant", "x":"0", "y":"0", "w": "0", "h": "0", "isModerator": "true"
    },
    {
        "uri": "participant1", "x":"0", "y":"0", "w": "0", "h": "0", "isModerator": "false"
    }
    (...)
}

鍵は次の通り

  • uri = 口座の uri

  • デバイス = デバイスのID

  • メディア = メディアのID

  • 活動 = 参加者が活動している場合

  • x =ビデオの位置 (x)

  • y =ビデオの位置 (y)

  • w = ビデオのサイズ (幅)

  • h =ビデオのサイズ (高度)

  • videoMuted = ビデオが静止されている場合

  • audioLocalMuted = 音声が本地的に静止されている場合

  • audioModeratorMuted = オーディオがモデレーターによって静止されている場合

  • isModerator = モデレーターなら

  • 手が上がった場合 =

  • voiceActivity = ストリームに声活動がある場合

  • 記録 = ピアが会議を記録している場合

新しいAPI

会議の最新情報と更新情報を得るための新しい方法 (コールマネジャー) と新しい信号が利用可能です:

VectorMapStringString getConferenceInfos(const std::string& confId);

void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);

実施

コンファレンス・オブジェクト (コールを混ぜた場合のみ存在します.これは私たちがマスターであることを意味します) は,各の Call`オブジェクトのレイアウトインフォスをベースに,会議全体の情報を管理します. getConferenceInfosは,このオブジェクトから直接情報を回収します.

ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ ヽ

会議の主任は,SIPチャンネルを通じて,以下のMIMEタイプのメッセージとして情報を送信します: アプリケーション/confInfo+json

会議のメンバーだと分かっています. 会議のメンバーだと分かっています.

コールは受信されたレイアウト, 会議は送信されたレイアウトを管理します.

会議の現状を変える

会議の状況を変更するには 参加者はホストが処理する命令を送る必要があります

議定書には以下の要件があります

会議では 3つのレベルが参加者を定義します

  • 参加者の身分であるアカウント

  • デバイス,各アカウントは複数のデバイスを通じて接続できるため

  • メディアは,デバイスによって複数のビデオが表示されるため (例えば,1台のカメラと1台のスクリーン共有)

バンドਵਿਡਥを節約するには 顧客が同時に複数の注文を送信できるはずです

一般的な行動

レイアウトを変更するには,モデレーターは"アプリケーション/コンフォアード+json"をタイプして,ペイロードを送信できます. 0はグリッドで, 1は大きなユーザー,他の小さなユーザー, 2は大きなユーザーです.

口座の行動

未来では,モダレーターに支持される行動はない.

装置の動作

  • hangup: true会議のデバイスをhangupする (モデレーターのみ)

  • raisehand: true/false raise hand の状態を変更する. 装置自体でしか実行できない,否則は落下される.

メディアの行動

  • muteAudio 参加者のオーディオを沈黙させるのは,モデレーターのみができる

  • muteVideo まだサポートされていません.

  • active メディアをアクティブとマークする.

  • 音声活動メディアストリームの音声活動状態を表示する (オーディオのみ関連)

申請/コンファード+jsonには以下の内容があります.

{
    "989587609427420" : {
        "moderator": true/false,
        "devices": {
            "40940943604396R64363": {
                "hangup": true,
                "raisehand": true/false,
                "media":{
                    "3532532662432" : {
                        "muteAudio": true/false,
                        "muteVideo": true/false,
                        "active": true/false,
                        "voiceActivity": true/false
                    }
                }
            }
        }
    },
    "layout": 0/1/2,
}

注:メディアの種類は会議情報に含まれ,クライアントが表示を改善するために使用できます (例えばスクリーン共有を切り替えません)

管理者

実際には3つの可能性があります

  • 設定の変更アカウントの設定 モデレーターのリストを追加する (設定.yml (defaultModeratorsはデフォルトモデレーターのリストを含める)

  • localModeratorsEnabledが本当なら,デバイスのすべてのアカウントはモデレーターになります

  • allModeratorsEnabledが本当なら,会議の誰もがモデレーターになる

未来

  • 制御を増やすために 流れを分離する?

記号/コメント

古いバージョンは,このフィールドが欠けている場合認識されます. 古いバージョンは,このフィールドが欠けている場合,このバージョンのフィールドが認識されます.