RTMP Streaming with TRTC

ソリューションの背景

クライアントによるアクセスのハードルを引き下げるため、TRTCはRTMP標準プロトコルのプッシュプルストリームをサポートします。実際の状況に応じて、OBS、FFmpegまたはその他のRTMPライブラリを選択してインストールし、プッシュを行うことができます。OBSは、サードパーティによるオープンソースプログラムの使いやすいライブストリームメディアコンテンツ制作ソフトウェアで、ユーザーに無償で提供されています。OS X、Windows、LinuxといったOSをサポートし、多様なライブストリーミングのシナリオに適しており、ほとんどのライブストリーミングのオペレーションニーズを満たします。最新版のソフトウェアは、OBS公式サイトからダウンロードできます。OBSを使用してプッシュを行う際は、プラグインをインストールする必要はありません。同時に、TRTCもRTMP標準プロトコルによるプルをサポートしています。
この機能は2023年3月7日から正式にリリースしています。この機能を利用する場合はTRTCアプリケーション月額パッケージ ベーシック版あるいは標準版をサブスクライブし、機能のロックを解除する必要があります。ただし、アクセスするRTMPストリームはルーム内のバーチャルユーザーとして、通常の通話費用が発生します。ストリーム1つで、1人のバーチャルユーザーとなります。詳細については、課金概要をご参照ください。

ユースケース

シーンタイプ
説明
オンライン教育
教師がビデオ教材を表示してビデオ授業を行う際、PC端末のOBSまたはFFmpegにより、大多数のメディア形式をRTMPでTRTCルームにプッシュすることができます。ルーム内の学生はTRTC SDKでプルすることで、同一の箇所まで進行したビデオを視聴することが保証され、教材の再生とスキップの進み具合、スピードの調整、次の章への切り替えなどをすべて教師側で制御することが可能です。各学生側では秩序立った授業を一斉に視聴することができるため、教育の質がさらに安定します。
スポーツイベント同時視聴シーン
スポーツイベントのストリーミングメディアは、イベントの主催者が常にRTMP形式のストリーミング方式で試合映像を提供し、RTMPプロトコルによってTRTCルームにプッシュするもので、TRTCルーム内で超低遅延のスポーツイベントライブストリーミングを同期した視聴が実現します。TRTCのリアルタイムインタラクション機能と組み合わせることで、フレンドと音声/ビデオでディスカッションをしたり、一緒に応援したりすることもできるため、どのような素晴らしい瞬間も逃さず共有することができます。
その他のシーン
メディアストリーミングをベースにしたリアルタイムインタラクションのあらゆる楽しみ方を、RTMPプロトコルプッシュですべて実現できます。ぜひいろいろな楽しみ方を見つけてください 。

ネットワークアーキテクチャ

RTMPは、TRTCのサブモジュールです。 TRTCのその他の端末と相互接続ができ、TRTCレコーディング、 リレーなどの既存の機能も使用可能です。ネットワークアーキテクチャについては、下図に示すとおりです。


ストリームアドレスの発行

プッシュアドレス

rtmp://intl-rtmp.rtc.qq.com/push/ルームナンバー?sdkappid=アプリケーション&userid=ユーザー名&usersig=署名
RTMP appNameはpushです。
アドレスのうち、ルームナンバー、アプリケーション、ユーザー名、署名は業務に変換する必要があります。
パラメータ簡略化のため、文字列のルームナンバーのみをサポートします。64文字以内で、文字は数字、アルファベット、アンダーバーのみとします。
アラート:
TRTCのその他の端末でRTMPストリームを見る場合は、文字列のルームナンバーで入室してください。
usersigの発行ルールについては、UserSig関連をご参照ください(署名が有効期間内であることをご確認ください)。
事例:
rtmp://intl-rtmp.rtc.qq.com/push/hello-string-room?sdkappid=140*****66&userid=******rtmp2&usersig=eJw1jdE********RBZ8qKGRj8Yp-wVbv*mGMVZqS7w-mMDQL

プルアドレス

rtmp://intl-rtmp.rtc.qq.com/pull/ルームナンバー?sdkappid=アプリケーション&userid=ユーザー名&usersig=署名&remoteuserid=相手側ユーザー名&sessionid=セッションid
RTMP appNameはpullです。
上記部分のフィールド要求とプッシュは同じです(各端末で使用する文字列のルームナンバーには特に注意)。最後に相手方ユーザー名およびセッションIDを追加するだけです。相手方ユーザー名は、そのユーザーのストリームをプルすることを表します。セッションIDは、トラブルシューティングや異なるプルの区別、UUIDのように一意であることを業務側が保証するために用いられます。
事例:
rtmp://intl-rtmp.rtc.qq.com/pull/hello-string-room?sdkappid=140*****66&userid=******rtmp3&usersig=eJw1jdE***************ZLgi5UAgOziXOnEhswHu1iUy8MmMDQL&remoteuserid=strin*****IDtest&sessionid=7CF03***D7134473B3F99A3FC152EBD3

使用例

RTMPプロトコルをサポートするソフトウェアあるいはコードライブラリプッシュプルを使用できます。以下にいくつかの例を示します。

OBSプッシュ

準備作業

OBSツールをインストールして起動し、次の操作を行います。

ステップ1:入力ソースを選択

下部のツールバーのソースタグを確認し、**+**ボタンをクリックし、業務ニーズに応じて入力ソースを選択します。よく用いられる入力ソースには次のものがあります。
入力ソース
説明
画像
単一画像のライブストリーミングに適用します
画像スライド放映
複数の画像をループまたは順番に再生できます
シーン
各種の大きなライブストリーミング効果を実現します。この時、別のシーンをソース元として現在のシーンに追加すれば、シーン全体の挿入を実現できます
メディアソース
ローカルのビデオをアップロードできます。また、ローカルのオンデマンドのビデオファイルに対し、ライブストリーミング化の処理を行うことができます
テキスト
ライブストリーミングのウィンドウの中にリアルタイムでテキストを追加します
ウィンドウキャプチャ
選択したウィンドウに応じてリアルタイムでキャプチャを行うことができます。ライブストリーミングは現在のウィンドウのコンテンツのみを表示し、その他のウィンドウはライブストリーミングのキャプチャを行いません
ビデオキャプチャデバイス
リアルタイムな動的キャプチャの撮影デバイスです。撮影した画面をライブストリーミングすることができます
音声入力キャプチャ
オーディオライブストリーミングイベント(音声入力デバイス)に利用します
音声出力キャプチャ
オーディオライブストリーミングイベント(音声出力デバイス)に利用します


ステップ2:プッシュパラメータの設定

1. 下部のツールバーのコントロール>設定ボタンから設定画面に入ることができます。
img

2. プッシュをクリックしてプッシュ設定タブに進み、サービスタイプにカスタムを選択します。
3. サーバーはrtmp://intl-rtmp.rtc.qq.com/push/と入力します。
4. ストリームキーの入力形式は次のようにします。
ルームナンバー?sdkappid=アプリケーション&userid=ユーザー名&usersig=署名
このうち、ルームナンバー、アプリケーション、ユーザー名、署名は業務に変換する必要があります。ストリームアドレスの発行の章をご参照ください。例えば次のとおりです。
hello-string-room?sdkappid=140*****66&userid=******rtmp2&usersig=eJw1jdE***************ZLgi5UAgOzoMhrayt*cjbmiCJ699T09juc833IMT94Ld7I0iHZqVDzvVAqkZsG-IKlzLiXOnEhswHu1iUyTc9pv*****D8MQwoA496Ke6U1ip4EAH4UMc5H9pSmv6MeTBWLamhwFnWRBZ8qKGRj8Yp-wVbv*mGMVZqS7w-mMDQL


ステップ3:出力の設定

RTMPバックエンドはBフレームの伝送をサポートしていません。ユーザーは次の設定によってプッシュ端末ソフトウェアのビデオコーデックパラメータを調整し、Bフレームを削除することができます。
1. 設定出力タブをクリックして設定を行います。
2. 出力モードから、アドバンスを選択します。キーフレームの間隔は1または2と入力することをお勧めします。CPUの使用プリセットはultrafastとして、設定はbaseline、微調整はzerolatencyを選択し、x264オプションはthreads=1と入力し、OKをクリックして設定を保存します。
アラート:
プッシュはBフレームを削除する必要があります。そうしない場合は、視聴側画面にジッター現象が現れます。以下の設定でbaselineを選択すると、Bフレームを削除できます。


ステップ4:ビデオオプションの設定

設定ビデオタブをクリックし、解像度とフレームレートを設定します。解像度は視聴者が見る画面の精細度を決定し、解像度が高いほど画面は鮮明になります。FPSはビデオのフレームレートで、ビデオ視聴のなめらかさを制御します。スタンダードのビデオフレームレートとしては24フレーム - 30フレームがあり、16フレーム未満の画面は見るとラグ感があります。またゲームはフレームレートに対する要求が高いため、通常は、30フレーム未満のゲームでは画面の連続性が明らかに損なわれます。


ステップ5:アドバンスオプションの設定

エンドツーエンド遅延を減少させるため、ストリームディレイをオンにしないことをお勧めします。
自動再接続をオンにする場合は、再試行の遅延時間をできるだけ短く設定し、ネットワークジッターの発生時に接続が切断されても可能な限り速やかに再接続できるようにすることをお勧めします。


ステップ6:プッシュをクリック

1. OBSの下部ツールバーのコントロールを確認し、プッシュを開始をクリックします。

2. プッシュ成功後、正常であれば画面下部にプッシュステータスが表示されます。TRTC コンソールダッシュボード に、このユーザーの入室記録があります。


ステップ7:その他の端末での視聴

前述のプッシュパラメータの設定で述べたとおり、TRTCのその他の端末では入室に文字列のルームナンバーを使用する必要があります。Web端末RTMPストリームの効果の視聴は次に示すとおりです。その他の端末での視聴を選択することもできます。


FFmpegプッシュ

コマンドラインまたはその他のRTMPライブラリプッシュを使用する必要がある場合は、完全なストリームアドレスを使用して、FFmpegまたはその他のRTMPライブラリプッシュに供給します。ビデオコーデックはH.264、オーディオコーデックはAAC、コンテナフォーマットはFLVをそれぞれ使用します。GOPは、2sまたは1sに設定することをお勧めします。 FFmpegはシーンによってコマンド設定パラメータが異なるため、ある程度のFFmpeg使用経験が必要です。FFmpegでよく使用するコマンドラインオプションを次に列記します。その他のFFmpegオプションについては、[FFmpeg公式サイト]((https://ffmpeg.org/ffmpeg.html!fea10639c9272b9ce924dfdbb9c6cb10)をご参照ください。

FFmpegコマンドライン

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url}

よくあるFFmpegオプション

オプション
説明
-re
nativeフレームレートで読み取り入力します。通常はローカルファイルの読み取りにのみ使用します
このうちoutput_file_optionsには、次を含むオプションを設定可能です。
オプション
説明
-c:v
ビデオコーデックです。libx264の使用を推奨します
-b:v
ビデオビットレートです。例えば1500kは1500kbpsを表します
-r
ビデオフレームレート
-profile:v
ビデオprofileです。baselineを指定するとBフレームをエンコードしません。TRTCバックエンドはBフレームをサポートしていません
-g
GOPフレーム数の間隔
-c:a
オーディオコーデックです。libfdk_aacの使用を推奨します
-ac
サウンドチャンネルです。2または1を入力します
-b:a
オーディオビットレート
-f
フォーマットを指定します。常にflvを入力して、TRTCに送信し、FLVコンテナを用いてパッケージをします
以下は、ファイルを読み取ってTRTCにプッシュする場合の例です。URLの両端に引用符号を付けるようにしてください。
ffmpeg -loglevel debug -re -i sample.flv -c:v libx264 -preset ultrafast -profile:v baseline -g 30 -sc_threshold 0 -b:v 1500k -c:a libfdk_aac -ac 2 -b:a 128k -f flv 'rtmp://intl-rtmp.rtc.qq.com/push/hello-string-room?userid=rtmpForFfmpeg&sdkappid=140xxxxxx&usersig=xxxxxxxxxx'

その他の端末での視聴

以下は、Web端末を使用した視聴効果についてです。その他の端末での視聴を選択することもできます。


ffplayプル

プルの例は次のとおりです。URLの両端に引用符号を付けるようにしてください。
ffplay -loglevel debug -fflags nobuffer -flags low_delay 'rtmp://intl-rtmp.rtc.qq.com/pull/hello-string-room?userid=rtmpForFfmpeg&sdkappid=140xxxxxx&usersig=xxxxxxxxxx&remoteuserid=bob_anchor&sessionid=7CF036F0***34473B3F99A3FC152EBD3'