すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Live:よくある質問

最終更新日:Nov 05, 2024

一部のAndroidデバイスのQQブラウザがストリームのプルと取り込みに失敗するという問題を解決するにはどうすればよいですか?

Huawei P20やvivo iQOOなどの一部のAndroidデバイスは、QQブラウザをインストールして初めてブラウザを開いた後、X5カーネルを起動できない場合があります。 その結果、WebRTCの互換性の問題が発生し、ストリームをプルして取り込むことができません。 次のエラーメッセージが報告されます。'RTCPeerConnectionで 'setRemoteDescription' の実行に失敗しました。 この問題が発生した場合は、次の手順を実行して、X5カーネルが初期化されていることを確認します。

  1. WI-FIネットワークに接続します。

  2. ページを更新し、約30秒待ちます。

  3. ブラウザを再起動して、再度ページにアクセスします。 問題は解決されました。

一部のブラウザがWeb RTS SDKをサポートしないのはなぜですか?

次のいずれかの理由により、ブラウザがWeb RTS SDKをサポートしていません。

  • ブラウザはWebRTC関連のAPI操作を実装しないか、またはAPI操作を欠陥のある方法で実装します。 たとえば、Microsoft Internet ExplorerやUC Browserなどです。

  • ブラウザはWebRTC関連のAPI操作をサポートしています。 ただし、ブラウザはVP8エンコーディングをサポートしますが、H.264エンコーディングはサポートしません。 たとえば、一部のAndroidデバイスの内蔵ブラウザです。

iOSのSafariがエラーメッセージ「Failed to set remote answer sdp」を報告するのはなぜですか?

問題の説明: 次のエラーメッセージが表示されます。

Failed to set remote answer sdp: The order of m-lines in answer doesn't match order in offer.

分析: 他のWebRTC SDKを統合したため、webrtc-adapterの競合が発生します。 この問題を防ぐため、RTS SDKはV2.2.4からアダプターを除外します。 RTS SDK V2.2.4以降は、他のWebRTC関連のSDKとともに使用できます。

  • JavaScriptを使用して、RTS SDK V2.2.4以降を直接統合できます。

  • npmを使用してRTS SDKを統合する場合は、次のコードをコンパイルします。

    import { AliRTS } from 'aliyun-rts-sdk/dist/aliyun-rts-sdk-without-adapter.js';

    TypeScriptプロジェクトで、型サポートを取得するにはモジュールを宣言する必要があります。

    // Create file typings.d.ts in the root directory of the project.
    declare module 'aliyun-rts-sdk/dist/aliyun-rts-sdk-without-adapter.js' {
      import {AliRTS} from 'aliyun-rts-sdk';
      export {AliRTS}
    }

ストリーム取り込み中にモバイルクライアントがどのようにカメラを切り替えるのか?

次のコードを実行して、ストリームの取り込み中にモバイルデバイスの前面カメラと背面カメラを切り替えます。

// Open the front-facing or rear-facing camera.
rtsClient.createStream({
  // environment: rear-facing camera. user: front-facing camera.
  video: { facingMode: 'environment' },
  audio: true
})
  .then(newStream => {
    // Update the preview on the mobile device.
    newStream.play(mediaElement);

    // Update the audio and video tracks.
    rtsClient.publisher.peerconnection.pc.getSenders().forEach(sender => {
      if (sender.track?.kind === 'video') {
        sender.replaceTrack(newStream.videoTrack);
      } else if (sender.track?.kind === 'audio') {
        sender.replaceTrack(newStream.audioTrack);
      }
    });

    // Stop the previous stream. oldStream refers to the stream that was created from the previous createStream method call.
    oldStream.stop();
  })