tencent cloud

フィードバック

最終更新日:2023-02-20 16:03:40
    このドキュメントでは、主に、ルーム内の他のユーザーのオーディオビデオストリームのサブスクリプション方法、つまり、他のユーザーのオーディオビデオの再生方法を紹介します。以下のドキュメントでは、便宜上、「ルーム内の他のユーザー」をまとめて「リモートユーザー」と呼びます。
    
    TRTC Web SDKの使用中には、以下のオブジェクトが頻繁に登場します。
    Client オブジェクト。ローカルクライアントを表します。Clientクラスのメソッドにより、通話ルームへの入室、ローカルストリーミングの公開、リモートストリームの閲覧などの機能を提供します。
    Streamオブジェクト。オーディオビデオストリーミングオブジェクトを表し、ローカルのオーディオビデオストリーミングオブジェクトLocalStreamおよびリモートのオーディオビデオストリーミングオブジェクトRemoteStreamが含まれます。Streamクラスのメソッドでは主に、オーディオビデオストリーミングオブジェクトのアクションを提供し、これにはオーディオおよびビデオの再生コントロールが含まれます。

    ステップ1: Clientオブジェクトの新規作成

    ドキュメント入室-ステップ1を参照し、clientを作成します。
    Clientの作成時にサブスクリプションモードの設定を選択できることにご注意ください。TRTCは、2つのサブスクリプションモードを提供しています。
    自動サブスクリプションです。stream-addedイベントを受信すると、SDKがすぐにこのリモートストリームに含まれるオーディオビデオデータを受け取ってデコードします。これはSDKのデフォルトのアクションです。
    手動サブスクリプション。画面共有を担うclientはプッシュのみを必要とし、プルは必要ないため、画面共有中のclientは自動サブスクリプションを無効にすることができます。
    const client = TRTC.createClient({
    ...,
    autoSubscribe: false // デフォルトではtrue、すなわち自動サブスクリプションです
    });

    ステップ2:リモートストリーム参加イベントの監視およびリモートストリームの閲覧

    リモートストリームのサブスクリプションには、まずどのリモートストリームがサブスクリプション可能かを知る必要があります。イベントClient.on('stream-added')の監視によってルーム内のリモートストリームを取得できます。このイベントを受信すれば、そのリモートストリームはサブスクリプション可能ということになり、イベントコールバックでClient.subscribe()によってリモートオーディオビデオストリーミングをサブスクリプションすることができます。
    client.on('stream-added', event => {
    const remoteStream = event.stream;
    console.log('リモートストリームの増加: ' + remoteStream.getId());
    //リモートストリームのサブスクリプション
    client.subscribe(remoteStream);
    });
    注意
    すでにルーム内にいるユーザーからのリモートストリーム通知を確実に受け取れるよう、入室前にClient.on('stream-added')イベントを監視します。
    リモートストリームから退出するなどその他のイベントは、API詳細ドキュメントで確認できます。

    ステップ3:サブスクリプション成功イベントの監視とリモートストリームの再生

    リモートストリームの成功イベントのコールバックでは、Stream.play()メソッドを呼び出すことで、Webページ上でオーディオビデオを再生します。playメソッドがdivエレメントのIDまたはHTMLDivElementオブジェクトをパラメータとして受け入れると、SDKがそのdivエレメント下に対応するオーディオビデオタグを自動作成し、オーディオビデオを再生します。
    playメソッドのより詳細なパラメータ説明については、Stream.play()をご参照ください。
    client.on('stream-subscribed', event => {
    const remoteStream = event.stream;
    console.log('リモートストリームのサブスクリプション成功: ' + remoteStream.getId());
    // 再生コンテナの作成
    let remotePlayerElement = document.createElement('div');
    remotePlayerElement.id = 'remote-stream-' + remoteStream.getId();
    document.body.appendChild(remotePlayerElement);
    // リモートストリームの再生を開始する場合、playメソッドに渡されるElement IDは、画面に存在するdivエレメントである必要があります
    remoteStream.play(remotePlayerElement.id);
    });
    ブラウザによる自動再生ポリシーの制限の影響により、playメソッドを呼び出すとPLAY_NOT_ALLOWEDのエラーが返される場合があることに特にご注意ください。このときSDKはポップアップウィンドウを表示して、ユーザーとページのインタラクションを促します。インタラクションが発生すると、SDKは自動的にインターフェースを呼び出して再生を再開します。
    TRTC.createClient()インターフェースでenableAutoPlayDialogパラメータをfalseに設定することで、SDKのポップアップウィンドウ機能を無効にし、さらにユーザーがクリックなどの操作でStream.resume()を呼び出し、オーディオビデオ再生を再開できるように実装することができます。
    client.on('stream-subscribed', event => {
    const remoteStream = event.stream;
    console.log('リモートストリームのサブスクリプション成功: ' + remoteStream.getId());
    // remoteStreamを使用してerrorを監視する方法で、0x4043エラーをキャッチして処理します
    remoteStream.on('error', error => {
    const errorCode = error.getCode();
    if (errorCode === 0x4043) {
    // PLAY_NOT_ALLOWED、ジェスチャー操作でstream.resumeを呼び出してオーディオビデオ再生を再開できるようユーザーを促します
    // remoteStream.resume()
    }
    });
    // 再生コンテナの作成
    let remotePlayerElement = document.createElement('div');
    remotePlayerElement.id = 'remote-stream-' + remoteStream.getId();
    document.body.appendChild(remotePlayerElement);
    // リモートストリームの再生を開始する場合、playメソッドに渡されるElement IDは、画面に存在するdivエレメントである必要があります
    remoteStream.play(remotePlayerElement.id);
    });

    ステップ4:オーディオビデオ通話ルームへの参加

    イベントの監視後、Client.join()を呼び出してオーディオビデオ通話ルームに入室できます。ドキュメント入室-ステップ2を参照できます。

    完全なコード

    
    const client = TRTC.createClient({
    mode: 'rtc',
    sdkAppId,
    userId,
    userSig
    });
    
    client.on('stream-added', event => {
    const remoteStream = event.stream;
    console.log('リモートストリームの増加: ' + remoteStream.getId());
    //リモートストリームのサブスクリプション
    client.subscribe(remoteStream);
    });
    
    client.on('stream-subscribed', event => {
    const remoteStream = event.stream;
    console.log('リモートストリームのサブスクリプション成功: ' + remoteStream.getId());
    // remoteStreamを使用してerrorを監視する方法で、0x4043エラーをキャッチして処理します
    remoteStream.on('error', error => {
    const errorCode = error.getCode();
    if (errorCode === 0x4043) {
    // PLAY_NOT_ALLOWED、ジェスチャー操作でstream.resumeを呼び出してオーディオビデオ再生を再開できるようユーザーを促します
    // remoteStream.resume()
    }
    });
    // 再生コンテナの作成
    let remotePlayerElement = document.createElement('div');
    remotePlayerElement.id = 'remote-stream-' + remoteStream.getId();
    document.body.appendChild(remotePlayerElement);
    // リモートストリームの再生を開始する場合、playメソッドに渡されるElement IDは、画面に存在するdivエレメントである必要があります
    remoteStream.play(remotePlayerElement.id);
    });
    
    try {
    await client.join({ roomId });
    console.log('入室成功');
    } catch (error) {
    console.error('入室に失敗しました。しばらくしてからもう一度お試しください'+ error);
    }
    
    お問い合わせ

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

    テクニカルサポート

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

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