tencent cloud

フィードバック

ライブストリーミングクイックスタート(Android)

最終更新日:2022-05-11 14:18:04

    ユースケース

    TRTCは、4種類の異なる入室モードをサポートしています。このうち、ビデオ通話(VideoCall)および音声通話(VoiceCall)を総称して通話モードといい、ビデオ・インタラクティブストリーミング(Live)およびボイス・インタラクティブストリーミング(VoiceChatRoom)を総称してライブストリーミングモードといいます。
    ライブストリーミングモードでのTRTCは、1つのルームで最大10万人の同時接続をサポートし、300ms未満のマイク接続遅延、1000ms未満の視聴遅延およびマイクのオン・オフのスムーズな切り替え技術を備えています。低レイテンシーインタラクティブストリーム、10万人のインタラクティブ教室、ビデオ婚活、eラーニング、リモート研修、超大規模ミーティングなどのユースケースに適しています。

    原理解析

    TRTCクラウドサービスは、「インターフェースモジュール」および「プロキシモジュール」という2種類の異なるタイプのサーバーノードから構成されています。

    • インターフェースモジュール
      この種のノードは、最も良質の回線および高性能の機器を採用しており、エンドツーエンドの低遅延マイク接続通話の処理に優れています。
    • プロキシモジュール
      この種のノードは、通常の回線および性能も一般的な機器を採用しており、同時進行性の高いプルストリーミング再生ニーズの処理にすぐれています。

    ライブストリーミングモードでは、TRTCはロールのコンセプトを導入し、ユーザーは「キャスター」および「視聴者」の2種類のロールに分けられ、「キャスター」はインターフェースモジュールに配分され、「視聴者」はプロキシモジュールに分配されます。同一ルームの視聴者の上限は10万人です。
    「視聴者」をマイク・オンにしたい場合、まずロール(switchRole)を「キャスター」に切り替えると発言できます。ロールを切り替えることで、ユーザーをプロキシモジュールからインターフェースモジュールに移動させ、TRTC特有の低遅延視聴技術およびスムーズなマイクのオン/オフ切替技術によって、すべての切り替え時間を非常に短くすることができます。

    サンプルコード

    Github にログインし、本ファイルに関連するサンプルコードを取得することができます。

    説明:

    Githubへのアクセスが遅い場合は、 TXLiteAVSDK_TRTC_Android_latest.zipを直接ダウンロードすることもできます。

    操作手順

    手順1:SDKの統合

    以下の方式を選択して TRTC SDK をプロジェクトに統合することができます。

    方法1:自動ロード(aar)

    TRTC SDKは、mavenCentralライブラリにリリースされています。更新を自動的にダウンロードするようにgradleを構成することで自動でダウンロード、更新できます。
    Android Studioを使用して、SDKを統合予定のプロジェクト(TRTC-API-Exampleは統合が完了済み、サンプルコードは参照用として提供)を開き、その後簡単な手順でapp/build.gradleファイルを修正するだけで、SDKの統合を完了できます。

    1. dependenciesの中にTRTCSDKの依存を追加します。

      dependencies {
        compile 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release'
      }
      
    2. defaultConfigでAppが使用するCPUアーキテクチャを指定します。

      説明:

      現在 TRTC SDKは、armeabi-v7a、arm64-v8aをサポートしています。

    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a"
        }
    }
    
    1. Sync Nowをクリックし、SDKを同期します。
      mavenCentralへのネットワーク接続に問題がない場合、SDKは自動的にダウンロードされ、プロジェクトに統合されます。

    方法2:ZIPパッケージをダウンロードして手動で統合

    ZIP圧縮パッケージを直接ダウンロードして、 クイックインテグレーション(Android)を参照してSDKをプロジェクトに統合することができます。

    手順2: App権限の設定

    AndroidManifest.xmlファイルにカメラ、マイクおよびネットワークのアクセス許可のリクエストを追加します。

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    

    手順3:SDKインスタンスを初期化し、イベントコールバックを監視する

    1. sharedInstance() インターフェースを使用してTRTCCloudインスタンスを作成します。

      // trtcCloudインスタンスを作成
      mTRTCCloud = TRTCCloud.sharedInstance(getApplicationContext());
      mTRTCCloud.setListener(new TRTCCloudListener());
      
    2. setListener属性を設定しイベントのコールバックを登録し、関連イベントおよびエラー通知をモニタします。

      // エラー通知のモニタ。エラー通知は、 SDK が動作を継続できないことを示します
      @Override
      public void onError(int errCode, String errMsg, Bundle extraInfo) {
      Log.d(TAG, "sdk callback onError");
      if (activity != null) {
          Toast.makeText(activity, "onError: " + errMsg + "[" + errCode+ "]" , Toast.LENGTH_SHORT).show();
          if (errCode == TXLiteAVCode.ERR_ROOM_ENTER_FAIL) {
              activity.exitRoom();
          }
      }
      }
      

    手順4:入室パラメータTRTCParamsを組み立てる

    enterRoom()インターフェースを呼び出すとき、キーパラメータTRTCParamsを入力する必要があります。このパラメータに含まれる入力必須のフィールドは下表に示すとおりです。

    パラメータ名 フィールドタイプ 補足説明 記入例
    sdkAppId 数字 アプリケーションID。TRTCコンソールでSDKAppIDを表示できます。 1400000123
    userId 文字列 アルファベットの大文字、小文字(a-z、A-Z)、数字(0-9)、下線およびハイフンのみを許可。ビジネスの実際のアカウントシステムを組み合わせて設定することをお勧めします。 test_user_001
    userSig 文字列 userIdを基にuserSigは計算されます。計算方法はUserSigの計算方法 をご参照ください。 eJyrVareCeYrSy1SslI...
    roomId 数字 数字タイプのルームナンバー。文字列形式のルームナンバーを使用したい場合は、TRTCParamsのstrRoomIdをご使用ください。 29834
    注意:

    • TRTCは、2つの同じuserIdによる同時入室をサポートしていません。同時に入室した場合、相互に干渉します。
    • 各端末のユースケースappSceneについては、統一する必要があります。統一していない場合、想定外のトラブルが生じる恐れがあります。

    手順5:キャスター端末でのカメラのプレビューとマイク集音を起動する

    1. キャスター側は、startLocalPreview()を呼び出すと、ローカルのカメラのプレビューを起動することができ、SDKがシステムにカメラの使用許可をリクエストします。
    2. キャスター側は、setLocalViewFillMode()を呼び出すと、ローカルのビデオ画面の表示モードを設定することができます。
    • Fillモードは塗りつぶしを意味し、画面は同じ比率で拡大およびトリミングできますが、黒い縁取りは付きません。
    • Fitモードは適応を意味し、画面は同じ比率で縮小してスクリーンにフィットしてそのコンテンツを完全に表示しますが、黒い縁取りが付くことがあります。
    1. キャスター側は、setVideoEncoderParam()インターフェースを呼び出すと、ローカルビデオのエンコードパラメータを設定できます。このパラメータにより、ルーム内の他のユーザーが視聴する際の画面の画質が決定されます。
    2. キャスター側は、startLocalAudio()を呼び出すと、マイクを起動でき、SDKがシステムにマイクの使用許可をリクエストします。
    //サンプルコード:ローカルのオーディオ・ビデオストリーミングの公開
    mTRTCCloud.setLocalViewFillMode(TRTC_VIDEO_RENDER_MODE_FIT);
    mTRTCCloud.startLocalPreview(mIsFrontCamera, localView);
    //ローカルビデオコーデックパラメータの設定
    TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();
    encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540;
    encParam.videoFps = 15;
    encParam.videoBitrate = 1200;
    encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
    mTRTCCloud.setVideoEncoderParam(encParam);
    mTRTCCloud.startLocalAudio();
    

    手順6:キャスター端末により美顔エフェクトを設定する

    1. キャスター側は、getBeautyManager()を呼び出すと、美顔設定インターフェースTXBeautyManagerを取得できます。
    2. キャスター側は、setBeautyStyle()を呼び出すと、美顔スタイルを設定できます。
    • Smooth:スムース。明らかな効果が感じられます。インフルエンサーのスタイルに近づけます。
    • Nature:ナチュラル。美肌補正のアルゴリズムは顔の詳細な質感を維持し、より自然な感じになります。
    • Pitu :フル機能版 のみサポートしています。
    1. キャスター側は、setBeautyLevel()を呼び出すと、美肌補正レベルを設定できます。通常、5の設定でOKです。
    2. キャスター側は、setWhitenessLevel()を呼び出すと、美白レベルを設定できます。通常、5の設定でOKです。

    手順7:キャスター端末からルームを新規作成し、プッシュを開始する

    1. キャスター側は、TRTCParamsのフィールドroleを**TRTCCloudDef.TRTCRoleAnchor**に設定します。これは現在のユーザーのロールがキャスターであることを表します。
    2. キャスター側は、enterRoom()を呼び出すと、TRTCParamsパラメータのフィールドroomIdの値をルームナンバーとするオーディオ・ビデオルームを作成し、**appScene**パラメータを指定することができます。
    • TRTCCloudDef.TRTC_APP_SCENE_LIVE:ビデオ・インタラクティブストリーミングモード。ここではこのモードを例にします。
    • TRTCCloudDef.TRTC_APP_SCENE_VOICE_CHATROOM:ボイス・インタラクティブストリーミングモード。
    1. ルームの新規作成が成功すると、キャスター側は、音声ビデオデータのエンコードおよび伝送フローを開始します。同時にSDKがonEnterRoom(result)イベントをコールバックします。パラメータresultが0より大きいときは入室成功を表し、具体的な数値は入室のために消費した時間になります。単位はミリ秒(ms)です。resultが0より小さい時は入室失敗を表し、具体的な数値は入室失敗のエラーコードになります。
    public void enterRoom() {
      TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
      trtcParams.sdkAppId = sdkappid;
      trtcParams.userId = userid;
      trtcParams.roomId = 908;
      trtcParams.userSig = usersig;
      mTRTCCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);
    }
    @Override
    public void onEnterRoom(long result) {
      if (result > 0) {
          toastTip("入室成功,総消費時間[∖(result)]ms")
      }else{
          toastTip("入室失敗,エラーコード[∖(result)]")
      }
    }
    

    手順8:視聴者が入室しライブストリーミングを視聴する

    1. 視聴者側は、TRTCParamsのフィールドroleを**TRTCCloudDef.TRTCRoleAudience**に設定します。これは現在のユーザーのロールが視聴者であることを表します。
    2. 視聴者側は、enterRoom()を呼び出すと、TRTCParamsパラメータのroomIdが示すオーディオ・ビデオルームに入室し、**appScene**パラメータを指定することができます。
    • TRTCCloudDef.TRTC_APP_SCENE_LIVE:ビデオ・インタラクティブストリーミングモード。ここではこのモードを例にします。
    • TRTCCloudDef.TRTC_APP_SCENE_VOICE_CHATROOM:ボイス・インタラクティブストリーミングモード。
    1. キャスター画面の視聴:
    • 視聴者側が事前にキャスターのuserIdを知っている場合は、入室に成功した後、直接キャスターのuserIdを使用してstartRemoteView(userId, view)を呼び出せば、キャスターの画面を表示することができます。
    • 視聴者側がキャスターのuserIdを知らない場合、視聴者側が、入室に成功すると、onUserVideoAvailable()イベント通知を受信しますので、コールバックにより受け取ったキャスターuserIdを使用してstartRemoteView(userId, view)を呼び出せば、キャスターの画面を表示することができます。

    手順9:視聴者とキャスターとのマイク接続

    1. 視聴者側がswitchRole(TRTCCloudDef.TRTCRoleAnchor)を呼び出し、ロールをキャスター(TRTCCloudDef.TRTCRoleAnchor)に切り替えます。
    2. 視聴者側がstartLocalPreview()を呼び出すと、ローカルの画面をアクティブにすることができます。
    3. 視聴者側がstartLocalAudio()を呼び出すと、マイクの集音が開始されます。
    //サンプルコード:視聴者マイク・オン
    mTrtcCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor);
    mTrtcCloud.startLocalAudio();
    mTrtcCloud.startLocalPreview(mIsFrontCamera, localView);
    //サンプルコード:視聴者マイク・オフ
    mTrtcCloud.switchRole(TRTCCloudDef.TRTCRoleAudience);
    mTrtcCloud.stopLocalAudio();
    mTrtcCloud.stopLocalPreview();
    

    手順10:キャスター間でルーム間マイク接続PKを行う

    TRTCでは、異なるオーディオ・ビデオルームにいる2人のキャスターが当初のライブストリーミングルームを退出しない場合にも、「ルーム間通話」機能によってマイク接続通話機能をプルし、「ルーム間マイク接続PK」を行うことができます。

    1. キャスターAが、connectOtherRoom()インターフェースを呼び出します。インターフェースパラメータは現在JSON形式を採用しており、キャスターBのroomIduserIdを接合して{"roomId": "978","userId": "userB"}の形式にしたパラメータをインターフェース関数に渡す必要があります。
    2. クロスルームに成功すると、キャスターAはonConnectOtherRoom()のイベントコールバックを受け取ります。同時に、2つのライブストリーミングルームのすべてのユーザーがonUserVideoAvailable()onUserAudioAvailable()のイベント通知を受け取ります。
      例えば、ルーム「001」のキャスターAがルーム「002」のキャスターBとconnectOtherRoom()を介してルーム間通話をする場合、ルーム「001」のユーザーはキャスターBのonUserVideoAvailable(B, true)コールバックとonUserAudioAvailable(B, true)コールバックを受信します。ルーム「002」のユーザーはキャスターAのonUserVideoAvailable(A, true)コールバックとonUserAudioAvailable(A, true)コールバックを受信します。
    3. 2つのルームにいるユーザーは、startRemoteView(userId, view)を呼び出すことで、もう一方のルームのキャスターの画面を表示することができ、音声が自動的に再生されます。
    //サンプルコード:ルーム間マイク接続PK
    mTRTCCloud.ConnectOtherRoom(String.format("{\"roomId\":%s,\"userId\":\"%s\"}", roomId, username));
    

    手順11:現在のルームから退出する

    exitRoom()メソッドを呼び出してルームを退出します。SDKは退室する時に、カメラ、マイクなどのハードウェアデバイスを停止してリリースする必要があるため、退室の動作は瞬時に完了するものではなく、onExitRoom()のコールバックを受信してはじめて、実際に退室操作を完了したことになります。

    // 退室を呼び出した後は、onExitRoomイベントのコールバックをお待ちください
    mTRTCCloud.exitRoom()
    @Override
    public void onExitRoom(int reason) {
      Log.i(TAG, "onExitRoom: reason = " + reason);
    }
    
    注意:

    Appの中で多くの音声ビデオのSDKを同時に統合した場合は、onExitRoomコールバックを受信してからその他の音声ビデオSDKを起動してください。そうしない場合は、ハード上の占有問題が生じることがあります。

    お問い合わせ

    カスタマーサービスをご提供できるため、ぜひお気軽にお問い合わせくださいませ。

    テクニカルサポート

    さらにサポートが必要な場合は、サポートチケットを送信して弊社サポートチームにお問い合わせください。24時間365日のサポートをご提供します。

    電話サポート(24 時間365日対応)