iOS声网直播模式下,推视频流推不出去

iOS系统,声网在直播模式下,两台手机连麦
一端已经进入频道,第二台手机进入频道后,第一台手机SDK会抛一个异常,回调进入频道、声音都是没问题的,但是视频首帧一直不来
onError、warning也没有回调

clientRole 设置的是主播角色吗?两台手机互相看不到?
麻烦请提供一下 哪个 uid 看不到 哪个 uid,以及频道号和时间点。

你们好像本地又打日志的吧,我直接把日志给你可以吗?

可以

agora.zip (148.6 KB)


uid 为 1565775841 的用户没有发送视频,具体原因需要 1565775841 的日志排查。你们两边都是真机测试的吧?

是的。稍等一下,我下午在跑一份日志给你看哈。
下午给你两端的。

好的,两边用的应该是同一套代码吧?1565775841 的摄像头是可以正常工作的吗?是否有给摄像头权限?

权限都是有的。

那我又重新跑了一次。
在描述一下操作流程:
1.A、B进入房间连麦正常
2.B退出并销毁SDK
3.B重新初始化SDK进入房间(这时B本地预览正常,但是A听得到声音但没有首帧,应该是B没推出来画面
4.A退出并销毁SDK
5.A重新初始化SDK进入房间(这时A/B本地预览正常,但是A/B听得到声音但没有首帧,应该是A/B都没有没推出来画面

agora.zip (122.3 KB)

要注意是直播模式才有这个问题,通话模式是好的

请问你是在哪里调用 destroy 方法的?方便提供一个测试 demo 吗?
destroy 方法调用注意事项:

  • 该方法需要在子线程中操作
  • 该方法为同步调用。 App 不能在 SDK 生成的回调中调用该方法,不然 SDK 只能等候该回调返回才能重新获取相应的对象资源造成死锁。

一般而言,我们不建议在通话途中调用 destroy 方法,destroy 是适用于无需通话时(关闭 APP 时)释放资源的场景。你后续还需要继续进行通话的话,请调用 leaveChannel 即可,尽量不要去调用 destroy

在退出房间回调后才调用的destroy,因为想要释放内存。

关键是通话模式是没问题的,这点我也比较迷惑。

额你先试试看不调用 destroy 是否会有问题?
我这边稍后也测试一下你这个场景。

请问下这个问题现在有结论了吗?

你的 clientrole 有问题啊,不清楚为什么中途重复调用那么多次?

INFO (15:15:41:307 | 0) 70663; [ds]: ver 1 ds ‘{“streamType”:5,“clientRole”:2}’

INFO (15:15:41:339 | 0) 171031; VideoEngine: setClientRole from 0 to 3 videoEnabled=1

INFO (15:15:41:584 | 0) 171031; VideoEngine: setClientRole from 3 to 1 videoEnabled=1

INFO (15:15:41:685 | 6) 171031; VideoEngine: setClientRole from 1 to 1 videoEnabled=1

INFO (15:15:47:342 | 0) 171031; VideoEngine: setClientRole from 1 to 2 videoEnabled=1

INFO (15:15:52:117 | 0) 171031; VideoEngine: setClientRole from 2 to 1 videoEnabled=1

INFO (15:15:59:341 | 0) 171031; VideoEngine: setClientRole from 1 to 2 videoEnabled=1

你不调用 destroy 有没有问题?不需要调用 destroy 来释放资源,leavechannel 就会把会话相关的所有资源释放掉。

想看是不是可以通过切角色解决。

我尝试过了,是可以的。
但是还是想了解一下为什么会有这样的情况。

你能否提供个测试 demo?我本地没法复现该问题额