问题标签 [openvidu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
388 浏览

swift - GoogleWebRTC 在 swift 本机应用程序 (OpenVidu) 中挂起(冻结)主线程

我们的 iOS (swift) 本机应用程序带有OpenVidu实现(在后台使用GoogleWebRTC ),我们遇到了挂起问题(应用程序由于主线程锁定而冻结)。所需的具体条件:需要加入现有房间,至少有 8 名参与者已经在直播。有 6 名参与者时,这种情况发生的频率较低,而且几乎从来没有少于 6 人。如果参与者一一加入,它不会挂起,只有当您加入房间时所有其他参与者都已经流式传输。这表明问题的并发性质。

GoogleWebRTCsetRemoteDescription待命:

主线程挂起

正如您在上面的屏幕截图中看到的那样,主线程挂起__psynch_cvwait。似乎没有任何其他线程被锁定。锁永远不会释放,使应用程序完全冻结。

在尝试解决它时,我尝试了以下方法:

  1. 我将 OpenVidu 信令服务器处理(RPC 协议)从主线程移到单独的线程中。这仅导致锁定现在发生在我创建的单独线程之一中。它现在不会阻塞 UI,但会阻塞 OV 信号。问题仍然存在。

  2. 我添加了锁以同步(一个接一个)处理每个信令事件(参与者加入事件、发布视频等)。这也无济于事(它实际上使情况变得更糟)。

  3. 我没有使用来自 Cocoapods 的 GoogleWebRTC v. 1.1.31999,而是下载了最新的 GoogleWebRTC 源,在发布配置中构建它们并包含在我的项目中。这无助于解决问题。

任何建议/意见将不胜感激。谢谢!

编辑1:

signaling_threadand are 都在worker_thread等待同一种锁中的东西。在锁定的那一刻,它们都没有执行我的任何代码。

我还尝试在 DEBUG build of 中运行GoogleWebRTC,在这种情况下不会发生任何锁定,但一切都会慢得多(这对于调试来说是可以的,但我们不能在生产环境中使用它)。

在此处输入图像描述

编辑2:

我试图包装额外DispatchQueue的 foroffersetLocalDescription回调,但这没有任何改变。问题仍然可以很好地重现(几乎 100% 的时间,如果我有 8 个参与者有流):

0 投票
0 回答
87 浏览

ffmpeg - 无法通过 Openvidu 媒体服务器从 Electron 应用程序获取 MediaStream 到浏览器

我目前遇到 openvidu-browser-2.17.0.js 的问题

我正在尝试将摄像机流从 RTSP 传输到部署在云上的 Openvidu 媒体服务器,然后将流返回到浏览器上。

RTSP 流使用 FFmpeg 转换为 HLS 流,并使用 hls.js 播放。它是在 HTML 的视频标记中捕获的,我使用 HTMLMediaElement.captureStream().getVideoTrack() 生成 MediaStreamTrack 并将其传递给 initPublisher 的 videoSource 属性。这个出版商部分被电子包裹着。然后,流连接到我们在本地部署的云 Openvidu 服务器,就像在文档中一样 ( https://docs.openvidu.io/en/2.18.0/deployment/deploying-on-premises/ )。订阅者部分是一个简单的 HTML 页面,显示在浏览器上,用于从云服务器获取流。当 streamCreated 事件发生时,订阅者负责创建会话并从媒体服务器生成流。

当我们使用网络摄像头对其进行测试时,整个工作流程运行良好,但是,当我们使用流视频的 MediaStreamTrack 而不是网络摄像头时,订阅者部分仅显示空白视频。

我的问题是:

1:是否可以像这样将 MediaStream 流式传输到 Openvidu 媒体服务器?

2:如果是,那么我在这里做错了什么?

描述错误

无法通过 Openvidu 媒体服务器从 Electron 应用程序获取 MediaStream 到浏览器。

预期行为

通过 Openvidu 媒体服务器从 Electron 应用程序接收流到浏览器。

错误的当前行为

只得到空白视频

客户端设备信息

  • Windows 10 版本 10.0.19042 版本 19042 上的 Chrome 版本 91.0.4472.77(官方版本)(64 位)
0 投票
1 回答
50 浏览

android - 使用 openvidu 分享 wikiitude AR

我正在使用 openvidu 开发视频会议应用程序。我们正在尝试在通话中加入 wikiitude AR 会话。问题是他们都需要访问相机,所以我有下一个场景:如果我先实例化本地参与者视频,我无法启动 wikitude AR 会话,因为视频不加载。如果我首先实例化 wikiitude 会话,则呼叫的其他参与者看不到设备视频。我能够为 openvidu 创建一个模仿相机的自定义视频捕捉器。需要发送每一帧才能使其正常工作。

在本地参与者上,我使用此功能发送帧:

但我无法从维基相机中取出帧。有办法访问帧并重新发送它们吗?

0 投票
1 回答
93 浏览

angular - Angular Web-app 麦克风切换导致错误“NotReadableError:并发麦克风进程限制”

我正在尝试实现麦克风切换功能,在浏览器上进行实时通话时,我可以用新的麦克风替换当前正在使用的麦克风。

选择要更改为的新麦克风后,我收到一条NotReadableError: Concurrent mic process limit.错误消息。此错误消息只能在 firefox 上复制,在 chromium 浏览器上不会显示错误,但是无法切换到另一个麦克风的问题仍然存在。

这是因为在添加新设备之前之前的设备没有被停用/销毁,这可以从此处的权限图标中看到:

在此处输入图像描述

旧麦克风仍处于活动状态,因此在允许新设备时,我收到并发麦克风进程限制错误。

我正在使用 replaceTrack() 切换到新选择的设备,并且在选择要激活的新麦克风时运行以下函数。

在切换到新的麦克风和摄像头权限之前,如何完全停用以前的麦克风/摄像头?

0 投票
1 回答
101 浏览

angular - 在 MediaStream 上切换麦克风设备会导致自己的声音回声

我正在构建一个 Angular 应用程序,它允许 2 个用户使用 Openvidu 呼叫解决方案互相视频通话。

在这个应用程序中,我开发了一项功能,可以更改您在通话中积极使用的摄像头或麦克风。

一旦选择了新的麦克风,之前的麦克风轨道就会停止并从流中删除,然后再添加新的麦克风。这个过程封装在下面的代码中:

上述代码成功运行后,最终结果应该是我在通话中主动使用的麦克风应该已经更改为我选择的那个。

情况就是这样,但是我面临的问题是,这种变化也伴随着我自己的非常响亮的回声,这意味着一旦我切换麦克风,有源麦克风就会改变,我也可以通过那个麦克风听到自己的声音。

对此的任何想法将不胜感激,感谢您的阅读。

注意:echoCancellation没有解决这个问题。

0 投票
0 回答
84 浏览

java - 如何在 gradle 项目中添加 openvidu-java-client

我正在尝试添加openvidu-java-client到现有的多模块gradle项目,但出现以下错误:

我有点新,gradle这里是我的build.gradle文件: