【小程序 SDK】常见问题集锦

此贴总结了目前用户使用 Agora 微信小程序 SDK 过程中遇到的各类常见问题,希望能够帮助开发者们更简单地去集成微信小程序音视频实时通信 SDK。也欢迎各位开发者们在本帖中讨论和补充。

更多 微信小程序 SDK 相关链接:
Agora Miniapp SDK for WeChat API Reference
使用 Agora 微信小程序 SDK 快速实现视频直播
SDK 下载
Demo 下载

小程序客户端初始化失败

1、出现错误码 901 绝大部分原因是没开小程序的服务权限,或没有配置域名,或 uid 参数格式不正确。请参考快速开始中的开发环境要求完成设置后再尝试;

2、请确保你的微信小程序基础库支持 live-pusher 及 live-player 组件,且这两个组件在微信开发者工具中打开。

3、请检查是否配置了以下7个域名:

https://miniapp.agoraio.cn
https://miniapp-1.agoraio.cn
https://miniapp-2.agoraio.cn
https://miniapp-3.agoraio.cn
https://miniapp-4.agoraio.cn
https://uni-webcollector.agora.io
wss://miniapp.agoraio.cn

4、请检查网络情况,确保网络环境正常。

5、请确保 join 时的 uid 参数是 int 型,channel 参数是 string 型。

6、903 这个错误通常是网络原因引起的;也可能是因为鉴权失败,如没有填 Token,或 Token 无效导致的。请检查并填入有效的 Token 进行尝试。

1赞

如何保存和打开日志?

调用如下 API 实现保存和打开日志:

  • 保存日志:
AgoraMiniappSDK.LOG.onlog = (text) => {
Utils.log(text);
};
  • 打开日志:
AgoraMiniappSDK.LOG.setLogLevel(-1);

Utils.log 是我们 demo 里的一个方法;onlog 中的 text 是一条字符串,如果想要获取日志,需要自己将 text 保存写在一个文件中,然后将该文件提供给我们。

小程序和 Web 互通时,Web 端可以看到小程序的视频,但小程序看不到 Web 端的视频?

Web 与小程序互通时,Web 端只支持 H264 模式的编码,不支持 VP8。将 Web SDK 的 index.html 文件修改为如下设置即可:

client = AgoraRtc.createClient({mode: "live", codec: "h264"});

小程序退后台处理

可以通过设置小程序的 live-pusher 组件中的 waiting-image 属性来处理。设置后,推流端退到后台时,可以推送静态图片来维持推流,其他端会收到本端预设的 waiting-image 图片来代替视频流。 除非通过一些方式 (例如后台播放背景音乐),小程序会在某些场景下断开 websocket 或者 rtmp 连接,例如点击右上角按钮将程序退到后台。这种情况下,若回到前台后收到 error code 904 或 501,则应使用 SDK 进行重连,具体方法请参考 重新加入频道 rejoin 中的描述。

websocket 连接失败

微信小程序目前最多支持 5 个 websocket,Agora 小程序会占用 1 个 websocket,如果超过了支持的范围,会导致 Agora 小程序获取不到 websocket 从而报错。目前 android 端小程序开发者工具有个 bug,在未校验环境下连接超过 1 个以上的 websocket 会出问题。这里可以通过在本地设置中取消勾选不校验合法域名、 web-view (业务域名)、 TLS 版本以及 HTTPS 证书 来规避。

1赞

只启用小程序的音频功能,不需要发送视频,应该如何设置?

v2.4.0 前的 SDK 版本,直接使用微信小程序的接口处理即可。在小程序的 live-pusher 组件中,通过设置 enable-camera 来实现开启/关闭摄像头。详见 小程序 live-pusher 组件文档

v2.4.0 起, 可以通过 Client.muteLocal 接口处理。

小程序和 Native 互通时,Native 端视频画面为什么上下颠倒?

该问题可能是由于 Native SDK 中的 setVideoEncoderConfiguratio 设置的方向模式 orientationModeORIENTATION_MODE.ORIENTATION_MODE_ADAPTIVE 导致的。解决方法是,将方向模式改成 ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT 就可以解决问题。

小程序的 live-pusher 组件里的 src 应该写什么?

客户端调用 client.publish 方法后,会回调一个以 rtmp 开头的临时地址,这个地址就分别是 live-player 和 live-pusher 组件中的 rtmp 播放地址 和 rtmp 推流地址。

小程序页面一直显示“加载中”

请确认有正确完成以下步骤:
1、请确保你的微信小程序基础库支持 live-pusher 及 live-player 组件,且这两个组件在微信开发者工具中打开。只有特定行业的认证企业账号才可使用这两个组件。详情请参考:https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html

2、请在 微信开发者工具 中查看,是否有开启音视频功能?

3、在微信公众平台账号的开发设置中,给予以下域名请求权限:
https://miniapp.agoraio.cn
https://miniapp-1.agoraio.cn
https://miniapp-2.agoraio.cn
https://miniapp-3.agoraio.cn
https://miniapp-4.agoraio.cn
https://uni-webcollector.agora.io
wss://miniapp.agoraio.cn

小程序无法和 Native 端互通?

由于小程序只支持直播模式,不支持通信模式。所以当频道中有小程序端用户时,其他端用户需要调用 setChannelProfile 将频道模式设置为直播模式。

小程序 SDK 可以检测到谁在说话吗?

小程序因端上受限于小程序音视频组件,故目前还不支持该功能。

如何在频道内切换角色?观众如何上麦?

  • v2.3.2 之前:不支持在频道内直接切换角色,需要 leave --> destroy --> new client --> setrole --> join or rejoin(如果想保留现有的 UI 情况,切换角色后可以用 rejoin 再加入)
  • v2.3.2 之后,可以直接在频道中切换角色。观众切主播,setRole --> publish ;主播切观众,unpublish --> setRole。建议参考我们 demo 的 API 调用时序。

小程序端作为观众不发流的处理方法

增加角色判断,如果是观众就不用执行 meeting.js 里的 publish 方法。

如果小程序断线重连,SDK 会有重连的机制吗?

  • sdk 不会自动重连,需要用户自己重连。
  • 如果调用 join 重连,频道里的所有其他用户都会重新触发 stream-added 回调;如果调用 rejoin 重连,并附上断线前频道内的 Uid 列表,就只有断线期间加入频道的用户的 stream-added 回调。可以参考我们的 demo

小程序支持大小流模式吗?

目前不行,如果频道内有大小流的用户,小程序默认就是拉大流。

你好; 小程序端支持接收 web端分享的屏幕吗、
如果支持的话,怎么判断哪个是 分享的屏幕呢?

支持的。需要自己在业务逻辑层去做区分哈,分别记录屏幕共享的 uid 和摄像头流的 uid,然后根据 uid 做区分。

多谢回复;
再问一下: 共享的屏幕 是不是 可以被当做一个 live-player 处理。
和你们提供的小程序demo中 , 人进去的效果一样;

另外,人数限制在demo中是10个人;
我在代码中看到了设置了最大人数。我如果修改为20人,会有什么比较大的影响吗?

请参考这篇文档:
https://docs.agora.io/cn/faq/capacity
但是对于小程序端而言,建议尽量不要超过 7 人