ここでは主に、TRTC SDKをベースとしてビデオ・マイク接続をサポートするだけでなく、万人単位に及ぶ同時視聴をサポートするオンラインライブストリーミング機能についてご紹介します。本稿では最もよく用いられるインターフェースのみをリストアップしています。インターフェース関数に関する詳しい情報をご希望の場合、APIドキュメントをご参照ください。
属するプラットフォーム | サンプルコード |
---|---|
Windows(MFC) | TRTCMainViewController.cpp |
Windows(Duilib) | TRTCMainViewController.cpp |
Windows(C#) | TRTCMainForm.cs |
TRTC SDKを使用するときの最初のステップでは、まずTRTCCloud
のシングルトンオブジェクトを取得し、SDKイベントを監視するためのコールバックを登録します。
ITRTCCloudCallback
イベントのコールバックインターフェースクラスを継承して、ローカルユーザーの入室/退室イベント、リモートユーザーの入室/退室イベント、エラーイベント、警告イベントなど、重要なイベントのコールバックインターフェースを書き換えます。addCallback
インターフェースをコールして、SDKイベントを登録、監視します。注意:
addCallback
でN回登録すると、同一イベントに対して、SDKがN回コールバックします。addCallback
を1回のみ呼び出すことをお勧めします。
// TRTCMainViewController.h
// ITRTCCloudCallbackのイベントコールバックインターフェースクラスを継承します
class TRTCMainViewController : public ITRTCCloudCallback
{
public:
TRTCMainViewController();
virtual ~TRTCMainViewController();
virtual void onError(TXLiteAVError errCode, const char* errMsg, void* arg);
virtual void onWarning(TXLiteAVWarning warningCode, const char* warningMsg, void* arg);
virtual void onEnterRoom(uint64_t elapsed);
virtual void onExitRoom(int reason);
virtual void onRemoteUserEnterRoom(const char* userId);
virtual void onRemoteUserLeaveRoom(const char* userId, int reason);
virtual void onUserVideoAvailable(const char* userId, bool available);
virtual void onUserAudioAvailable(const char* userId, bool available);
...
private:
ITRTCCloud * m_pTRTCSDK = NULL;
...
}
// TRTCMainViewController.cpp
TRTCMainViewController::TRTCMainViewController()
{
// TRTCCloud インスタンスの作成
m_pTRTCSDK = getTRTCShareInstance();
// SDK イベントコールバックの登録
m_pTRTCSDK->addCallback(this);
}
TRTCMainViewController::~TRTCMainViewController()
{
// SDK イベントのモニタリング のキャンセル
if(m_pTRTCSDK) {
m_pTRTCSDK->removeCallback(this);
}
// TRTCCloud インスタンスのリリース
if(m_pTRTCSDK != NULL) {
destroyTRTCShareInstance();
m_pTRTCSDK = null;
}
}
// エラー通知はモニタリングする必要があります。エラー通知は、SDKの実行を継続できないことを意味します
virtual void TRTCMainViewController::onError(TXLiteAVError errCode, const char* errMsg, void* arg)
{
if (errCode == ERR_ROOM_ENTER_FAIL) {
LOGE(L"onError errorCode[%d], errorInfo[%s]", errCode, UTF82Wide(errMsg).c_str());
exitRoom();
}
}
TRTCParamsは、SDKの最も重要なパラメータであり、sdkAppId、userId、userSig、roomIdという4つの入力必須フィールドが含まれます。
SDKAppID
Tencent Cloud TRTC コンソールに入ります。アプリケーションがない場合は、作成してください。作成するとSDKAppIDが確認できます。
userId
自由に指定することができ、文字列タイプのため、お客様の既存のアカウント体系と同じのものにすることが可能です。但し、同じ音声/ビデオルームには2つの同名の userIdが存在できませんので、ご注意ください。
userSig
SDKAppIDとuserIdを基に、userSigを計算できます。計算方法については、UserSigの計算方法をご参照ください。
roomId
ルーム番号は数字タイプであり、自由に指定できますが、同一のアプリケーション内の2つのオーディオビデオルームに同じroomIdを割り当てることはできませんので、ご注意ください。文字列形式のルーム番号を使用したい場合は、TRTCParamsのstrRoomIdをご使用ください。
TRTC SDK は、デフォルトではローカルのWebカメラの撮影が有効になっていません。startLocalPreview
でローカルのWebカメラをオンにしてプレビュー画面を表示でき、stopLocalPreview
でこれをオフにします。
ローカルプレビューを起動する前に、setLocalViewFillMode
を呼び出して、ビデオ表示モードをFill
またはFit
モードに指定することができます。この2種類のモードでは、ビデオサイズは同じ比率のまま拡大・縮小され、次のような違いがあります。
Fill
モードでは、ウィンドウを確実に塗りつぶすことが優先されます。拡大・縮小されたビデオサイズと表示ウィンドウのサイズが一致しない場合、余分なビデオ部分は削除されます。Fit
モードでは、すべてのビデオコンテンツを確実に表示することが優先されます。拡大・縮小されたビデオサイズと表示ウィンドウのサイズが一致しない場合、塗りつぶされていないウィンドウ領域は黒で塗りつぶされます。void TRTCMainViewController::onEnterRoom(uint64_t elapsed)
{
// レンダリングウィンドウのハンドルを取得します。
CWnd *pLocalVideoView = GetDlgItem(IDC_LOCAL_VIDEO_VIEW);
HWND hwnd = pLocalVideoView->GetSafeHwnd();
if(m_pTRTCSDK)
{
// SDKインターフェースを呼び出し、レンダリングモードおよびレンダリングウィンドウを設定します。
m_pTRTCSDK->setLocalViewFillMode(TRTCVideoFillMode_Fit);
m_pTRTCSDK->startLocalPreview(hwnd);
}
}
TRTC SDKは、デフォルトではローカルのマイク集音がオンになりません。キャスターはstartLocalAudio
を呼び出してローカルの集音を起動し、オーディオビデオデータを配信することができます。stopLocalAudio
はその機能をオフにします。startLocalPreview
の後、続いてstartLocalAudio
を呼び出すことができます。
説明:
startLocalAudio
はマイクの使用権限をチェックします。マイクの権限がない場合、SDKはユーザーに起動の申請をします。
キャスターはenterRoom
を使用してオーディオビデオルームを作成することができます。パラメータTRTCParams
のroomId
は、ルーム番号を指定するために使用します。同時に、role
フィールドをTRTCRoleAnchor
(キャスター)に指定する必要もあります。
appScene
パラメータは、SDKのユースケースを指定します。ここでは、TRTCAppSceneLIVE
(オンラインライブストリーミング)を使用します。
onEnterRoom
インターフェースをコールバックします。パラメータelapsed
は入室の所要時間を表し、単位はmsです。onError
インターフェースをコールバックします。パラメータは、errCode
(エラーコード ERR_ROOM_ENTER_FAIL
、エラーコードはTXLiteAVCode.h
を参照できます)、errMsg
(エラー原因)、extraInfo
(保留用パラメータ)です。// TRTCMainViewController.cpp
void TRTCMainViewController::startBroadCasting()
{
// TRTCParamsの定義はヘッダーファイル TRTCCloudDef.hを参照
TRTCParams params;
params.sdkAppId = sdkappid;
params.userId = userid;
params.userSig = usersig;
params.roomId = 908; // 入室したいルームを入力します
params.role = TRTCRoleAnchor; //キャスター
if(m_pTRTCSDK)
{
m_pTRTCSDK->enterRoom(params, TRTCAppSceneLIVE);
}
}
void TRTCMainViewController::onError(TXLiteAVError errCode, const char* errMsg, void* arg)
{
if(errCode == ERR_ROOM_ENTER_FAIL)
{
LOGE(L"onError errorCode[%d], errorInfo[%s]", errCode, UTF82Wide(errMsg).c_str());
// userSigが合法か、ネットワークが正常かなどをチェックします
}
}
...
void TRTCMainViewController::onEnterRoom(uint64_t elapsed)
{
LOGI(L"onEnterRoom elapsed[%lld]", elapsed);
// ローカルのビデオプレビューを起動します。以下のドキュメントを参照して、ビデオコーデックパラメータを設定し、ローカルのカメラ画面の内容をプレビューしてください
}
キャスターはライブストリーミング中、プライバシーを保護するために、ローカルのオーディオビデオデータをブロックしたい場合が出てきます。このような場合、muteLocalVideo
を呼び出せばローカルのビデオ収集をブロックでき、muteLocalAudio
を呼び出せばローカルのオーディオ収集をブロックできます。
視聴者はenterRoom
を呼び出すことでオーディオビデオルームに入室することができます。パラメータTRTCParamsのroomId
は、ルームナンバーを指定するために使用されます。appScene
は、同様にTRTCAppSceneLIVE
(オンラインライブストリーミング)にも入力しますが、role
フィールドはTRTCRoleAudience
(視聴者)と指定する必要があります。
void TRTCMainViewController::startPlaying()
{
// TRTCParamsの定義はヘッダーファイル TRTCCloudDef.hを参照
TRTCParams params;
params.sdkAppId = sdkappid;
params.userId = userid;
params.userSig = usersig;
params.roomId = 908; // 入室したいルームを入力します
params.role = TRTCRoleAudience; //視聴者
if(m_pTRTCSDK)
{
m_pTRTCSDK->enterRoom(params, TRTCAppSceneLIVE);
}
}
キャスターがルーム内にいる場合、視聴者はTRTCCloudDelegateのonUserVideoAvailable
コールバックを介してキャスターのuseridを取得します。次に、視聴者がstartRemoteView
メソッドを呼び出すと、キャスターのビデオ画面が表示されます。
setRemoteViewFillMode
によって、ビデオ表示モードを Fill
または Fit
モードに指定することができます。この2種類のモードはビデオサイズはいずれも同じ比率で拡大縮小します。違いは以下のとおりです。
Fill
モード:ビューウィンドウが全てコンテンツで埋まることを優先的に保証します。拡大縮小後のビデオサイズがビューウィンドウのサイズと一致しない場合、はみ出たビデオの部分はカットされます。Fit
モード:ビデオのコンテンツが全て表示されることを優先的に保証します。拡大縮小後のビデオサイズがビューウィンドウのサイズと一致しない場合、欠けているウィンドウエリアは黒色で補填されます。void TRTCMainViewController::onUserVideoAvailable(const char* userId, bool available){
if (available) {
// レンダリングウィンドウのハンドルを取得します。
CWnd *pRemoteVideoView = GetDlgItem(IDC_REMOTE_VIDEO_VIEW);
HWND hwnd = pRemoteVideoView->GetSafeHwnd();
// リモートユーザーのビデオのレンダリングモードを設定します。
m_pTRTCSDK->setRemoteViewFillMode(TRTCVideoFillMode_Fill);
// SDK インターフェースを呼び出し、リモートユーザーのストリーミングを再生します。
m_pTRTCSDK->startRemoteView(userId、 hwnd);
}else{
m_pTRTCSDK->stopRemoteView(userId);
}
}
注意:
- TRTCAppSceneLIVEモードでは、同じルームにいる視聴者(TRTCRoleAudience)人数に制限はありません。
- 各端末のユースケースappSceneについては、統一する必要があります。統一していない場合、想定外のトラブルが生じる恐れがあります。
キャスターと視聴者のいずれも、TRTCCloudが提供するswitchRole
を介して、ロールを相互に切り替えることができます。最もよくあるのは、視聴者とキャスターとのマイク接続シナリオです。視聴者はこのインターフェースを通じて「アシスタントキャスター」に切り替わった上で、ルーム内のもとの「メインキャスター」と双方向のマイク接続を行うことができます。
exitRoom
メソッドを呼び出してルームを退出します。通話中か否かにかかわらず、このメソッドを呼び出すと、ビデオ通話に関するすべてのリソースがリリースされます。exitRoom
をコールした後、SDKは複雑な退室ハンドシェイクフローに進みます。SDKがonExitRoom
メソッドをコールバックすると、リソースのリリースが完全に終了します。
この記事はお役に立ちましたか?