视频不流

Video not streaming

我为大量主播编写了一个简单的网络应用程序。流很稳定,但 audio/video 没有显示。

也许你知道原因。

https://github.com/enexusde/Maven-Many-Videomeeting-RTC-OnlineServlet3.0

要启动应用程序,只需在控制台中写入 mvn,所有目标均使用 Maven defaultGoal。

然后启动两个具有 url http://localhost:8080/vc/ 的浏览器选项卡。

此致

我已经在 GitHub 上分叉并修改了您的项目。可以找到工作代码和设置说明 here.

这是打开 4 个选项卡时的样子。您可以在右上角看到本地会话 ID,并在每个远程视频上看到相应的会话 ID。我使用 VCam 进行调试。这就是为什么试用文本:


有一些问题需要解决:

  1. 主要问题是 the comparison if (y != "complete"). You are comparing event object with "complete" string. You end up sending offer SDP without any ICE candidate. Using if (self.peerConn.iceGatheringState === "complete")ref 修复了部分问题。通过此更改,接收方可以看到发送方的视频。
  2. 从接收方创建答案并发回 SDP immediately。 ICE 候选集合在您调用 createAnswer()createOffer() 后开始。所以你发送的 SDP 没有任何 ICE 候选人。
    解决此问题后,发件人端没有 onAddStreamstreamEventsChangedHandler 处理程序。因此发件人永远不会将接收到的流设置为相应的 <video> 元素。
  3. RTCPeerConnection 能够发送接收 video/audio 具有相同连接对象的流。您也可以在发件人上设置 setRemoteDescription()。您不必维护单独的 Sender 和 Receiver 连接对象。这里的主要改进可能是您将 Sender 和 Receiver classes 合并为一个 Connection class。这样您就可以在每个参与者端为 n 个参与者创建 n-1 个连接。在服务器上你只需要跟踪 n 个连接而不是 n*(n-1)。
  4. RTCPeerConnection.onaddstreamdeprecated. Use RTCPeerConnection.ontrack property
  5. 通过安全通道 (HTTPS) 提供网页。因为浏览器不会让您的网页通过不安全的 (HTTP) 访问媒体硬件。ref。 Localhost(127.0.0.1) 异常。
    您可以 configure tomcat7-maven-plugin in pom.xml to serve pages on HTTPs. Steps to setup HTTPs are in the README.md 文件。
  6. 你需要更多timeout delay。 2秒非常少。由于这种直接的 P2P 连接,客户端之间的流传输延迟可能非常低,而连接到您的服务器的延迟很高。因此,如果他们无法连接到服务器并不意味着他们停止了通信。一旦您在客户端之间建立连接,服务器的角色就结束了,直到它们明确注销。
  7. 由于 Chrome autoplay policy you can't start playing other's video directly. So had to add an overly 在页面上强制用户交互。一旦您实施了登录,这将不是问题。
  8. 在创建 Room 对象之前获取本地媒体流,最好是在页面加载之后和用户通过覆盖之前立即获取。如果用户延迟提供设备访问权限,您的 Room 对象将已经完成与其他对等方的所有连接过程,而无需共享任何本地 audio/video 流。如果您稍后处理它,则必须再次将 tracks/streams 添加到所有连接。
  9. 进行了一些重组。在服务器端,我从 MeetSessions.java to separate files. It was getting hard to understand the code. Something with the index.html 移动了 public 内部 classes。

    我已经使用 Windows PC、Android phone 和平板电脑测试了 LAN/Wi-Fi 中的代码。如果您在 public 域中托管您的服务器,您可能需要 TURN server as well for these reasons.