多人视频中切换摄像头的时候,关闭之后再打开闪一下之前加载视频流,才能加载新的视频,怎么解决

多人视频中切换摄像头的时候,关闭之后再打开闪一下之前加载视频流,才能加载新的视频,怎么解决

是本地视频预览会这样吗?请提供一下 SDK log。

是多人视频加载远端的视频,之后远端有人关闭摄像头再打开就会出现这个问题,而且咱们多人视频官网的demo也会出现这个问题,demo名称OpenVideoCall-iOS

能描述一下你的复现步骤吗?
我这边用 agora-video-call app 测试是没有问题的啊

步骤:
1、远端关闭摄像头;
2、远端切换摄像头;
3、远端打开摄像头。

AppStore下载的是没有问题,但是官网demo是能复现的地址https://github.com/AgoraIO/Basic-Video-Call/blob/master/Group-Video/OpenVideoCall-iOS/README.zh.md
自己操作是看不出来,需要两个手机配合
步骤:
A开关摄像头
B看A的视频,A的摄像头关闭在开的时候,B会先看到A上次流,之后在切换成新的流

感觉是 github 上的这个 demo 有点问题,我这边本地也测一下。
你看一下编译官网 demo 能不能复现问题?
https://download.agora.io/sdk/release/Agora_Native_SDK_for_iOS_v3_0_0_1_FULL.zip?_ga=2.78175124.1493192143.1585534841-1583961819.1580439641

官网的demo也是这样,A和B视频,A把摄像头关闭,之后A的摄像头采集的人变了,当A在打开摄像头的时候,会闪一下上次摄像头采集的人,才能更新新的流

我分别测试了官网的 demo 和 github 的 demo,都没办法复现你的这个问题。。我两端都是用这个 demo 来测试的。

你试试看换个设备来测下?

换三个设备了,都会出现这个问题,你官网的多人视频demo是摄像头关闭之后就停留在上次加载流那里,所以你看的不是很清楚,但是也是先加载一下之前的流,才能更新新的流,但是官网的一对一的那个demo就能看的很清楚,你可以测试下

这个 demo 都没写关闭摄像头的逻辑啊,你说的应该是 leaveChannel 挂断通话吧,这和关闭摄像头 并不是一个概念啊。
你试试看在 demo 代码里加一个逻辑,在 leaveChannel 前调用 setupRemoteVideo 将远端用户 view 设置为空,然后 joinChannel 的时候重新绑定一下远端用户视图。看下还有没有这个问题?

那你可以看下其他多人视频的demo,会不会有这样的问题,我们现在的应用是要多人视频的功能,是需要我加载远端用户的视频的时候先取消view绑定吗,之后再重新绑定吗?我看API文档说是这个方法传nil就可以解除绑定,open func setupRemoteVideo(_ remote: AgoraRtcVideoCanvas) -> Int32,但是我swift开发,不是可选项不能传nil

现在类似这样问题,有什么解决方案吗,我测试下

如果是用 muteLocalVideoStream 方法来控制视频的发送与否,那么不会出现这个问题的啊。如果是 leaveChannel 后重新加入,远端看到的画面出现你描述的问题,这个应该是之前的远端视图内存没有释放的缘故。
你可以在远端用户mute自己的视频时,把他的 view 设为空,远端用户发送视频时,再去绑定 view。

可以传 nil 的啊,我这边也是 swift,可以传。根本的解决方案就是要先释放掉对应 view 的内存,你可以 remove 掉这个 view,当远端用户再次发送视频时,再去绑定一个新的 view。理论上而言把 view 设为 nil,应该是会释放这个 view 的内存的。

您那里有具体的案例吗,能发下吗

我测试了,加载远端视频流的时候,先把view删除之后再绑定还是会出现这样的问题,您那边是怎么解除绑定的在加载的呢

刚才和同事沟通确认了一下,有两种方案:
1、当远端用户不发送视频时,需要将远端用户视图 removeFromSuperview。当远端用户再次发送视频时,需要 new 一个 view,再调用 setupRemoteVideo 绑定新的 view 即可。
2、在初始化成功后、加入频道成功前,调用如下私有接口:
[self.agoraKit setParameters:@“{\” che.video.keepLastFrame\”:false}”];

刚才我测试了这两种方案还是不行,咱们App Store的Agora Video call也有这个问题

咱们现在官网的demo有解决切换摄像头的时候加载先加载之前流的画面,在切换新的流,多人视频

现在用官网的 Demo 测试,是不是已经没有这个问题了呢?近期官网 Demo 应该是有过更新的,我这边也内部确认下~