常见问题

如何解决部分安卓手机QQ浏览器无法推拉流?

部分安卓手机(如华为P20、vivo iQOO)安装QQ浏览器后首次打开可能无法拉起X5内核,导致WebRTC兼容问题推拉流失败(报错:Failed to execute 'setRemoteDescription' on 'RTCPeerConnection’)。如果遇到该场景请按照以下操作确保X5内核初始化:

  1. 连接WIFI网络。

  2. 刷新当前页面并等待大约30秒。

  3. 重启浏览器,再次访问页面即可恢复正常。

为什么部分浏览器不支持Web RTS SDK?

对于Web RTS SDK暂不支持的浏览器,主要有以下原因:

  • 浏览器未实现WebRTC相关API,或实现有缺陷(如IE浏览器、UC浏览器)。

  • 浏览器支持WebRTC API,但不支持H.264编码,仅支持VP8(如部分安卓手机系统自带浏览器)。

为什么Safari/iOS报错: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提供了一个不包含adapter的版本,您可以在已经引入同类SDK的情况下使用此版本(从2.2.4版本开始支持)。

  • 如果使用JS方式引入SDK,则只需替换成2.2.4版本。

  • 如果使用NPM方式引入SDK,则使用以下方式引入:

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

    在 TypeScript 项目中,为了获得和普通版本一样的类型支持,需要您进行模块声明:

    // 项目根目录新建文件 typings.d.ts
    declare module 'aliyun-rts-sdk/dist/aliyun-rts-sdk-without-adapter.js' {
      import {AliRTS} from 'aliyun-rts-sdk';
      export {AliRTS}
    }

如何在推流中切换摄像头?

如果在推流过程中需要在手机前后摄像头之间切换,可以参考以下操作:

// 打开前置/后置摄像头
rtsClient.createStream({
  // environment-后置摄像头,user-前置摄像头
  video: { facingMode: 'environment' },
  audio: true
})
  .then(newStream => {
    // 更新本地预览的画面
    newStream.play(mediaElement);

    // 更新发布出去的音视频 track
    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);
      }
    });

    // 关掉原来的 stream(oldStream 是之前一次 createStream 的返回值)
    oldStream.stop();
  })