ライブストリーミングクイックスタート(iOS&Mac)

最終更新日:2021-10-12 14:17:34

    適用ケース

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

    原理解析

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

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

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

    サンプルコード

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

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

    操作手順

    手順1:SDKへの統合

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

    方法1: CocoaPodsを使用して統合

    1. CocoaPodsをインストールします。具体的な操作は CocoaPods公式サイトインストールの説明をご参照ください。
    2. 現在のプロジェクトのルートディレクトリのPodfileファイルを開き、以下のコンテンツを追加します。
      説明:

      このディレクトリにPodfileファイルがない場合は、まずpod initコマンドを実行しファイルを新規作成してから、以下の内容を追加してください。

      target 'Your Project' do
          pod 'TXLiteAVSDK_TRTC'
      end
      
    3. 以下のコマンドを実行して TRTC SDK をインストールします。
      pod install
      
      インストールが成功したら、現在のプロジェクトのルートディレクトリに xcworkspace ファイルが生成されます。
    4. 新規作成した xcworkspace ファイルを開けばOKです。

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

    一時的にCocoaPods環境をインストールしたくない場合、またはインストール済みだがCocoaPodsライブラリへのアクセスがやや遅い場合は、 ZIP圧縮パッケージを直接ダウンロードして、クイックインテグレーション(iOS)を参照してSDKをプロジェクトに統合することができます。

    手順2:メディアデバイスの権限追加

    Info.plistファイルにカメラおよびマイクのアクセス許可のリクエストを追加します。

    Key Value
    Privacy - Camera Usage Description カメラ使用の許可をリクエストする理由を記述。例えば、ビデオチャットでビデオを表示するには、カメラへのアクセスが必要です
    Privacy - Microphone Usage Description マイク使用の許可をリクエストする理由を記述。例えば、チャットで音声を送信するには、マイクへのアクセスが必要です

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

    1. sharedInstance() インターフェースを使用してTRTCCloudインスタンスを作成します。
      // trtcCloudインスタンスを作成
      _trtcCloud = [TRTCCloud sharedInstance];
      _trtcCloud.delegate = self;
    2. delegate属性を設定しイベントのコールバックを登録し、関連イベントおよびエラー通知をモニタします。
      // エラー通知は監視すべきもので、捕捉してユーザーに通知する必要があります
      - (void)onError:(TXLiteAVError)errCode errMsg:(NSString *)errMsg extInfo:(NSDictionary *)extInfo {
      if (ERR_ROOM_ENTER_FAIL == errCode) {
      [self toastTip:@"入室失敗"];
      [self.trtcCloud 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 数字 デフォルトでは文字列のタイプのルームナンバーをサポートしていません、文字列タイプのルームナンバーは入室速度に影響します。文字列タイプのルームナンバーをサポートする必要が確実にある場合は、 チケットを提出 してご連絡ください。 29834
    注意:

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

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

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

    //ローカルビデオコーデックパラメータの設定
    TRTCVideoEncParam *encParams = [TRTCVideoEncParam new];
    encParams.videoResolution = TRTCVideoResolution_640_360;
    encParams.videoBitrate = 550;
    encParams.videoFps = 15;

    [self.trtcCloud setVideoEncoderParam:encParams];

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

    1.キャスター側は、getBeautyManager()を呼び出すと、美顔設定インターフェース[TXBeautyManagerを取得できます。
    2. キャスター側は、setBeautyStyle()を呼び出すと、美顔スタイルを設定できます。

    • Smooth:スムース。明らかな効果が感じられます。インフルエンサーのスタイルに近づけます。
    • Nature:ナチュラル。美肌補正のアルゴリズムは顔の詳細な質感を維持し、より自然な感じになります。
    • Pitu :エンタープライズ版 のみサポートしています。
      1. キャスター側は、setBeautyLevel()を呼び出すと、美肌補正レベルを設定できます。通常、5の設定でOKです。
      2. キャスター側は、setWhitenessLevel()を呼び出すと、美白レベルを設定できます。通常、5の設定でOKです。
      3. iPhoneのカメラの色調はデフォルトだと黄色味がかっているため、setFilter()を呼び出して、キャスターに美白特殊効果を追加することをお勧めします。美白特殊効果に対応するフィルターのファイルのダウンロードアドレスは、次となります。フィルターファイル

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

    1. キャスター側は、TRTCParamsのフィールドroleTRTCRoleType.anchorに設定します。これは現在のユーザーのロールがキャスターであることを表します。
    2. キャスター側は、enterRoom()を呼び出すと、TRTCParamsパラメータのフィールドroomIdの値をルームナンバーとするオーディオ・ビデオルームを作成し、appSceneパラメータを指定することができます。
      • TRTCAppScene.LIVE:ビデオ・インタラクティブストリーミングモード。ここではこのモードを例として取り上げます。
      • TRTCAppScene.voiceChatRoom:ボイス・インタラクティブストリーミングモード。
    3. ルームの新規作成が成功すると、キャスター側は、音声ビデオデータのエンコードおよび伝送フローを開始します。同時にSDKがonEnterRoom(result) イベントをコールバックします。パラメータresultが0より大きいときは入室成功を意味し、具体的な数値は入室してからの消費時間であり、単位はミリ秒(ms)です;resultが0より小さい時は入室失敗を意味し、具体的な数値は入室失敗のエラーコードになります。
    - (void)enterRoom() {
    TRTCParams *params = [TRTCParams new];
    params.sdkAppId = SDKAppID;
    params.roomId = _roomId;
    params.userId = _userId;
    params.role = TRTCRoleAnchor;
    params.userSig = [GenerateTestUserSig genTestUserSig:params.userId];
    [self.trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE];
    }

    - (void)onEnterRoom:(NSInteger)result {
    if (result > 0)
    {
    [self toastTip:@"入室成功"];
    } else {
    [self toastTip:@"入室失敗"];
    }
    }

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

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

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

    1. 視聴者側がswitch(TRTCRoleType.TRTCRoleAnchor)を呼び出し、ロールをキャスター(TRTCRoleType.TRTCRoleAnchor)に切り替えます。
    2. 視聴者側がstartLocalPreview()を呼び出すと、ローカルの画面をアクティブにすることができます。
    3. 視聴者側がstartLocalAudio()を呼び出すと、マイクの集音が開始されます。
    //サンプルコード:視聴者マイク・オン
    [self.trtcCloud switchRole:TRTCRoleAnchor];
    [self.trtcCloud startLocalAudio:TRTCAudioQualityMusic];
    [self.trtcCloud startLocalPreview:_isFrontCamera view:self.view];

    //サンプルコード:視聴者マイク・オフ
    [self.trtcCloud switchRole:TRTCRoleAudience];
    [self.trtcCloud stopLocalAudio];
    [self.trtcCloud 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, available: true)コールバックとonUserAudioAvailable(B, available: true)コールバックを受信します。ルーム「002」のユーザーはキャスターAのonUserVideoAvailable(A, available: true)コールバックとonUserAudioAvailable(A, available: true)コールバックを受信します。
    3. 2つのルームにいるユーザーは、startRemoteView(userId, view: view)を呼び出すことで、もう一方のルームのキャスターの画面を表示することができ、音声が自動再生されます。

    //サンプルコード:ルーム間マイク接続PK
    NSMutableDictionary * jsonDict = [[NSMutableDictionary alloc] init];
    [jsonDict setObject:@([_otherRoomIdTextField.text intValue]) forKey:@"roomId"];
    [jsonDict setObject:_otherUserIdTextField.text forKey:@"userId"];
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil];
    NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    [self.trtcCloud connectOtherRoom:jsonString];

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

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

    // 退室を呼び出した後は、onExitRoomイベントのコールバックをお待ちください
    [self.trtcCloud exitRoom];

    - (void)onExitRoom:(NSInteger)reason {
    NSLog(@"ルームから退出: reason: %ld", reason)
    }
    注意:

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