CDN Relayed live Streamingおよびクラウドレコーディングおよび再生 などのアプリケーションユースケースでは、TRTCルームの複数のオーディオ・ビデオストリーミングを1つに常にミキシングする必要があります。Tencent CloudサーバーのMCUのミクスストリーミングトランスコードクラスターを使用してこの作業を完成させることができます。MCUクラスターはマルチチャネルオーディオ・ビデオストリーミングをニーズに応じてミキシングし、最終的に生成したビデオストリームをライブCDNおよびクラウドレコーディングシステムに送付します。
クラウドミクスストリーミングには、2種類の制御方式があります。
注意:方法2は、iOS、Android、Windows、Mac、Electron、FlutterおよびデスクトップブラウザプラットフォームのSDKをサポートします。
クラウドミクスストリーミングには、デコード、ミキシングおよび再エンコードの3つのプロセスがあります。
サーバーのREST APIStartMCUMixTranscodeを呼び出してクラウドミクスストリーミングを起動できます。この APIについては、以下の詳細に注意していただく必要があります。
StartMCUMixTranscode
内の[LayoutParams]パラメータを使用して、以下のような様々なレイアウトモードを設定することができます。
フロートテンプレート(LayoutParams.Template = 0)
グリッドテンプレート(LayoutParams.Template = 1)
画面共有テンプレート(LayoutParams.Template = 2)
LayoutParams.MainVideoUserId
およびLayoutParams.MainVideoStreamType
の2つのパラメータによって左側のメイン画面の内容を指定する必要があります。ピクチャーインピクチャーテンプレート(LayoutParams.Template = 3)
LayoutParams
のMainVideoUserId
およびMainVideoStreamType
パラメータを使用して、大画面のユーザーIDとストリームタイプを指定できます。LayoutParams
のSmallVideoLayoutParams
パラメータを使用して、小画面のユーザーIDとストリームタイプおよびレイアウト位置などの情報を指定できます。カスタムテンプレート(LayoutParams.Template = 4)
LayoutParams
のPresetLayoutConfig
パラメータ(これは1つの配列)を介して、各チャネル画面の位置を事前に設定できます。PresetLayoutConfig
パラメータのUserId
パラメータを指定しない場合、レイアウトエンジンは、入室するユーザーを入室する順序に従って、PresetLayoutConfig
配列で指定された各位置に順番に割り当てます。PresetLayoutConfig
配列の1つがUserId
パラメータに指定されている場合、レイアウトエンジンは指定されたユーザーのために画面内での位置を事前に確保します。PresetLayoutConfig
配列のプリセット位置がすべて使われると、レイアウトエンジンは他のユーザーの画面と音声をミキシングしなくなります。注意:クラウドミクスストリーミングサービスは、最大16チャネルのオーディオ・ビデオストリーミングを同時にサポートします。ユーザーがオーディオしか持っていない場合は、1チャネルとしてカウントされます。
StartMCUMixTranscode
内の[EncodeParams]パラメータを使用して、ミクスストリーミングコーデックパラメータを設定することができます。
名称 | 説明 | 推奨値 |
---|---|---|
AudioSampleRate | ミクスストリーミング-出力ストリームオーディオサンプルレート | 48000 |
AudioBitrate | ミクスストリーミング-出力ストリームオーディオビットレート。単位はkbps | 64 |
AudioChannels | ミクスストリーミング-出力ストリームオーディオサウンドチャネル数 | 2 |
VideoWidth | ミクスストリーミング-出力ストリーム幅。オーディオ・ビデオ出力時に入力必須 | カスタマイズ |
VideoHeight | ミクスストリーミング-出力ストリーム高。オーディオ・ビデオ出力時に入力必須 | カスタマイズ |
VideoBitrate | ミクスストリーミング-出力ストリームビットレート。単位はkbps。オーディオ・ビデオ出力時に入力必須 | カスタマイズ |
VideoFramerate | ミクスストリーミング-出力ストリームフレームレート。オーディオ・ビデオ出力時に入力必須 | 15 |
VideoGop | ミクスストリーミング-出力ストリームGOP。オーディオ・ビデオ出力時に入力必須 | 3 |
BackgroundColor | ミクスストリーミング-出力ストリーム背景色 | カスタマイズ |
OutputParams.PureAudioStream
パラメータを 1に設定します。これは、ミキシングされたオーディオデータストリームがCDNに転送されることを意味します。OutputParams.RecordId_開始時間_終了時間
のフォーマットに従って命名されます。例:file001_2020-02-16-12-12-12_2020-02-16-13-13-13
。OutputParams.RecordAudioOnly
パラメータを1に設定します。mp3フォーマットのファイルのみを録音することを意味します。サーバーからREST APIStopMCUMixTranscodeを呼び出すと、ミクスストリーミングはすぐに終了できます。
TRTC SDKを使用してミクスストリーミングコマンドを発出するのは非常に簡単です。各プラットフォームのsetMixTranscodingConfig()APIを呼び出せば完了です。現在SDKは、一般的に使用されている4種類のミクスストリーミングスキームを提供しています。
パラメータ項目 | ピュアオーディオモード(PureAudio) | プリセットレイアウトモード(PresetLayout) | 画面共有モード(ScreenSharing) | 全手動モード(Manual) |
---|---|---|---|---|
呼び出し頻度 | インターフェースを1回だけ呼び出す必要があります | インターフェースを1回だけ呼び出す必要があります | インターフェースを1回だけ呼び出す必要があります | 次のケースではミクスストリーミングインターフェースを呼び出す必要あり: |
コンテンツのミキシング | オーディオのみをミキシング | 各チャネルのコンテンツをカスタマイズ | 受講生端末画面はミキシングしない | 各チャネルのコンテンツをカスタマイズ |
audioSampleRate | 48000を推奨 | 48000を推奨 | 48000を推奨 | 48000を推奨 |
audioBitrate | 64を推奨 | 64を推奨 | 64を推奨 | 64を推奨 |
audioChannels | 2を推奨 | 2を推奨 | 2を推奨 | 2を推奨 |
videoWidth | 設定不要 | 0にできません | 0を推奨 | 0にできません |
videoHeight | 設定不要 | 0にできません | 0を推奨 | 0にできません |
videoBitrate | 設定不要 | 0にできません | 0を推奨 | 0にできません |
videoFramerate | 設定不要 | 15を推奨 | 15を推奨 | 15を推奨 |
videoGOP | 設定不要 | 3を推奨 | 3を推奨 | 3を推奨 |
mixUsers配列 | 設定不要 | プレースホルダー設定を使用 | 設定不要 | 実際のuserId設定を使用 |
ピュアオーディオモードは、オーディオ通話(AudioCall)およびボイスチャットルーム(VoiceChatRoom)などのピュアオーディオのユースケースに適用します。このユースケースでは、SDKのenterRoomインターフェースを呼び出すときに設定することができます。
ピュアオーディオモードでは、SDKはルームのマルチチャネルのオーディオストリームを自動的に1チャネルにミキシングします。
enterRoom()
関数を呼び出して入室するとき、業務のニーズに従ってAppSceneパラメータをTRTCAppSceneAudioCall
またはTRTCAppSceneVoiceChatRoom
に設定します。現在のルームにはビデオはなく、オーディオしかないことを明確にします。streamId
パラメータを設定します。MCU出力のミキシングオーディオストリームの行先を指定します。startLocalAudio()
を呼び出してローカルのオーディオキャプチャおよびオーディオのアップストリームを起動します。
説明:クラウドミクスストリーミングは、本質的に、現在(すなわち、ミクスストリーミングコマンドを発出する)ユーザーが対応しているオーディオ・ビデオストリーミング上でマルチチャネルストリームをミクスストリーミングすることですから、現在のユーザーは自身でオーディオのアップストリームを有していなければ、ミクスストリーミングの前提条件を構成できません。
setMixTranscodingConfig()
インターフェースを呼び出してクラウドミクスストリーミングを起動するには、呼び出すときにTRTCTranscodingConfig
のmode
パラメータをTRTCTranscodingConfigMode_Template_PureAudioに設定し、audioSampleRate
、audioBitrate
およびaudioChannels
などオーディオ出力品質に関するパラメータを指定する必要があります。注意:ピュアオーディオモードでは、
setMixTranscodingConfig()
インターフェースは何度も呼び出す必要はありません。入室に成功しローカルオーディオのアップストリームを起動してから1度呼び出せばOKです。
プリセットレイアウトモードは、ビデオ通話(VideoCall)およびインタラクティブライブストリーミング(LIVE)などのオーディオとビデオの両方を利用するユースケースに適用します。このユースケースではSDKのenterRoomインターフェースを呼び出すときに設定できます。
プリセットレイアウトモードでは、SDKは事前に設定した各チャネル画面のレイアウトルールに従って、ルームのマルチチャネルオーディオストリームを1チャネルに自動的にミキシングします。
enterRoom()
関数を呼び出して入室するときは、業務のニーズに従ってAppSceneパラメータをTRTCAppSceneVideoCall
またはTRTCAppSceneLIVE
に設定します。streamId
パラメータを設定します。MCU出力のミキシングオーディオストリームの行先を指定します。startLocalPreview()
およびstartLocalAudio()
を呼び出して、ローカルのオーディオ・ビデオのアップストリームを起動します。
説明:クラウドミクスストリーミングは、本質的に、現在(すなわち、ミクスストリーミングコマンドを発出する)ユーザーが対応しているオーディオ・ビデオストリーミング上でマルチチャネルストリームをミクスストリーミングすることですから、現在のユーザーは自身でオーディオ・ビデオのアップストリームを有していなければ、ミクスストリーミングの前提条件を構成できません。
setMixTranscodingConfig()
インターフェースを呼び出してクラウドミクスストリーミングを起動します。呼び出しが必要なときはTRTCTranscodingConfig
のmode
パラメータをTRTCTranscodingConfigMode_Template_PresetLayoutに設定して、audioSampleRate
、audioBitrate
およびaudioChannels
などオーディオ出力品質に関連するパラメータ、並びにvideoWidth
、videoHeight
、videoBitrate
、videoFramerate
などのビデオ出力の品質に関連するパラメータを指定します。mixUser
パラメータを組み合わせます。プリセットレイアウトモードでは、mixUser
のuserId
パラメータには$PLACE_HOLDER_REMOTE$、$PLACE_HOLDER_LOCAL_MAIN$および$PLACE_HOLDER_LOCAL_SUB$の3つのプレースホルダーの文字列を使用します。これらの意味は下表に示すとおりです。プレースホルダー | 意味 | 複数サポートの有無 |
---|---|---|
$PLACE_HOLDER_LOCAL_MAIN$ | ローカルカメラのチャネルを示しています | サポートなし |
$PLACE_HOLDER_LOCAL_SUB$ | ローカル画面共有(画面のみ)を示しています | サポートなし |
$PLACE_HOLDER_REMOTE$ | リモートマイク接続者が同時に複数設定可能であることを示しています | サポートあり |
次のサンプルコードを使用して、「大画面1枚・小画面2枚を上下にオーバーレイ」というミキシング効果を実現できます。
TRTCTranscodingConfig *config = [[TRTCTranscodingConfig alloc] init];
// 解像度は720 × 1280、ビットレートは1500kbps、フレームレートは20FPSに設定します
config.videoWidth = 720;
config.videoHeight = 1280;
config.videoBitrate = 1500;
config.videoFramerate = 20;
config.videoGOP = 2;
config.audioSampleRate = 48000;
config.audioBitrate = 64;
config.audioChannels = 2;
// プリセットレイアウトモードを採用します
config.mode = TRTCTranscodingConfigMode_Template_PresetLayout;
config.mixUsers = [NSMutableArray new];
// キャスターカメラの画面位置
TRTCMixUser* local = [TRTCMixUser new];
local.userId = @"$PLACE_HOLDER_LOCAL_MAIN$";
local.zOrder = 0; // zOrderを0とすることは、キャスター画面を最下層に位置付けることを意味します
local.rect = CGRectMake(0, 0, videoWidth, videoHeight);
local.roomID = null; // ローカルユーザーはroomIDを入力する必要はありませんが、リモートでは必要です
[config.mixUsers addObject:local];
// マイク接続者の画面位置
TRTCMixUser* remote1 = [TRTCMixUser new];
remote1.userId = @"$PLACE_HOLDER_REMOTE$";
remote1.zOrder = 1;
remote1.rect = CGRectMake(400, 800, 180, 240); //参照用
remote1.roomID = 97392; // ローカルユーザーはroomIDを入力する必要はありませんが、リモートでは必要です
[config.mixUsers addObject:remote1];
// マイク接続者の画面位置
TRTCMixUser* remote2 = [TRTCMixUser new];
remote2.userId = @"$PLACE_HOLDER_REMOTE$";
remote2.zOrder = 1;
remote2.rect = CGRectMake(400, 500, 180, 240); //参照用
remote2.roomID = 97392; // ローカルユーザーはroomIDを入力する必要はありませんが、リモートでは必要です
[config.mixUsers addObject:remote2];
// クラウドミクスストリーミングを開始します
[_trtc setMixTranscodingConfig:config];
注意:
- プリセットレイアウトモードでは、
setMixTranscodingConfig()
インターフェースは何度も呼び出す必要はありません。入室に成功しローカルオーディオのアップストリームを起動してから1度呼び出せばOKです。- Web端末インターフェースの命名は他の端末と少々異なります。詳細については、Client.startMixTranscode()をご参照ください。
画面共有モードは、eラーニングおよびインタラクティブな授業などのケースに使用します。このケースではSDKのenterRoomインターフェースを呼び出すとき、AppSceneパラメータをTRTCAppSceneLIVE
に設定できます。
画面共有モードでは、SDKはまず選定したターゲット解像度に従って一枚のキャンバスを作成します。講師が画面共有していないとき、SDKはカメラ画像をキャンバスと同じ比率で拡大します。講師が画面共有を起動すると、SDKは画面共有した画面を同じキャンバスに描出します。キャンバスを作成することで、ミクスストリーミングモジュールの出力解像度の一致を確保でき、録画およびウェブサイト視聴時のビデオ互換性に関する問題を防止(一般的な再生プレーヤーは解像度が変化するビデオをサポートしません)することができます。
enterRoom()
関数を呼び出して入室するときは、業務のニーズに応じてAppSceneパラメータをTRTCAppSceneLIVE
に設定します。streamId
パラメータを設定し、MCU出力のミキシングオーディオ・ビデオストリーミングの行先を指定します。startLocalPreview()
およびstartLocalAudio()
を呼び出して、ローカルのオーディオ・ビデオのアップストリームを起動します。
説明:クラウドミクスストリーミングは、本質的に、現在(すなわち、ミクスストリーミングコマンドを発出する)ユーザーが対応しているオーディオ・ビデオストリーミング上でマルチチャネルストリームをミクスストリーミングすることですから、現在のユーザーは自身でオーディオ・ビデオのアップストリームを有していなければ、ミクスストリーミングの前提条件を構成できません。
setMixTranscodingConfig()
インターフェースを呼び出してクラウドミクスストリーミングを起動し、呼び出しが必要なときはTRTCTranscodingConfig
のmode
パラメータをTRTCTranscodingConfigMode_Template_ScreenSharingに設定し、audioSampleRate
、audioBitrate
およびaudioChannels
などのオーディオ出力品質に関するパラメータ、並びにvideoWidth
、videoHeight
、videoBitrate
、videoFramerate
などのビデオ出力品質に関するパラメータを指定します。
説明:
videoWidth
およびvideoHeight
パラメータを0に指定する場合は、SDKはユーザーの現在のスクリーンのアスペクト比に従って、適切な解像度を自動的に計算します。
注意:
- 画面共有モードは、WindowsおよびMacのプラットフォームのみをサポートします。
画面共有モードでは、setMixTranscodingConfig()
インターフェースは何度も呼び出す必要はありません。入室に成功しローカルオーディオのアップストリームを起動してから1度呼び出せばOKです。- 教育モードでのビデオコンテンツは画面共有がメインであるため、カメラ画像および画面共有画像の同時伝送は非常に帯域幅を消費します。そこで、カメラ画像および受講生の画像を
setLocalVideoRenderCallback()
およびsetRemoteVideoRenderCallback()
インターフェースを介して、現在のスクリーン上に直接描出することをお勧めします。- TRTCTranscodingConfigの
videoWidth
およびvideoHeight
パラメータをすべて0に指定することによって、SDKでインテリジェントに出力解像度を選択することができます。講師の現在のスクリーン幅が1920pxより小さい場合、SDKは講師の現在の画面の実際の解像度を使用します。講師の現在の画面幅が1920pxより大きい場合、SDKは現在のスクリーンのアスペクト比に従って1920 × 1080(16:9)、1920 × 1200(16:10)または1920 × 1440(4:3)の中から選択します。
全手動モードは、上述の自動モードがすべて適用できないケースに適合します。全手動は最もフレキシブルで、各種のミクスストリーミング方法を自由に組み合わせることができます。しかし、使い勝手は最も劣ります。
全手動モードでは、TRTCTranscodingConfig
のすべてのパラメータを設定し、TRTCCloudDelegateのonUserVideoAvailable()
およびonUserAudioAvailable()
コールバックをモニタする必要があり、これによって現在のルームでの各マイク・オンしているユーザーのオーディオ・ビデオ状態に従ってmixUsers
パラメータを絶えず調整します。この設定がないとミクスストリーミングは失敗してしまいます。
enterRoom()
関数を呼び出して入室するときは、業務のニーズに応じてAppSceneパラメータを設定します。streamId
パラメータを設定し、MCU出力のミキシングオーディオ・ビデオストリーミングの行先を指定します。startLocalAudio()
を呼び出してローカルオーディオのアップストリームを起動します(または startLocalPreview()
を同時に呼び出してビデオのアップストリームを起動します)。
説明:クラウドミクスストリーミングは、本質的に、現在(すなわち、ミクスストリーミングコマンドを発出する)ユーザーが対応しているオーディオ・ビデオストリーミング上でマルチチャネルストリームをミクスストリーミングすることですから、現在のユーザーは自身でオーディオ・ビデオのアップストリームを有していなければ、ミクスストリーミングの前提条件を構成できません。
setMixTranscodingConfig()
インターフェースを呼び出してクラウドミクスストリーミングを起動します。呼び出す必要があるときは、TRTCTranscodingConfig
のmode
パラメータをTRTCTranscodingConfigMode_Manualに設定し、audioSampleRate
、audioBitrate
およびaudioChannels
などのオーディオ出力品質に関するパラメータを指定します。業務シーンにもビデオがある場合は、videoWidth
、videoHeight
、videoBitrate
、videoFramerate
などのビデオ出力品質に関するパラメータを同時に設定する必要があります。onUserVideoAvailable()
およびonUserAudioAvailable()
コールバックをモニタし、ニーズによってmixUsersパラメータを指定します。
説明:プリセットレイアウト(PresetLayout)モードとは異なり、Manualでは各
mixUser
のuserId
パラメータを実際のマイク接続者IDに指定する必要があり、このマイク接続者がビデオを起動しているかどうかでmixUser
のpureAudio
パラメータもそのとおりに設定する必要があります。
注意:全手動モードでは、ルームのマイク接続者のマイク・オン、マイク・オフ動作をリアルタイムでモニタし、マイク接続者の人数やオーディオ・ビデオ状態に従って、
setMixTranscodingConfig()
インターフェースを何度も呼び出す必要があります。
Cloud MixTranscodingでは、MCUクラスターに入力されたオーディオ・ビデオストリーミングをデコードし、出力を再エンコードする必要があり、このため追加のサービス料金が発生します。TRTCは、MCUクラスターを使用してCloud MixTranscodingを行ったユーザーに対し、追加の付加価値料金を請求します。Cloud MixTranscoding料金は、トランスコーディング出力解像度サイズとトランスコーディング期間に応じて請求されます。トランスコーディングの出力解像度が高く、トランスコーディングの出力時間が長いほど、料金は高くなります。詳細については、Cloud MixTranscoding課金説明をご参照ください。
setMixTranscodingConfig
を呼び出した)キャスターが退室している。nil/null
に設定し、ミクスストリーミングを自主的に停止する。その他の場合、TRTC Cloudは、ミクスストリーミングの状態を継続して維持するために最善を尽くします。従って、予期せぬミクスストリーミング料金が発生しないよう、ミクスストリーミングが不要な場合は、上記の方法でクラウドミクスストリーミングを可能な限り速やかに終了してください。
この記事はお役に立ちましたか?