繁体   English   中英

视频不流式传输

[英]Video not streaming

我为大量流媒体编写了一个简单的 web 应用程序。 流是稳定的,但音频/视频不显示。

也许你知道为什么。

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

要启动应用程序,只需在控制台中编写mvn ,所有目标都使用 maven 默认目标。

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

问候

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

这是打开 4 个选项卡后的外观。 您可以在右上角看到本地 session id,并在每个远程视频上看到相应的会话 id。 我使用VCam进行调试。 这就是为什么试用文本: 在此处输入图像描述


有一些问题需要解决:

  1. 主要问题是比较if (y != "complete") 您正在将事件 object 与“完整”字符串进行比较。 你最终会在没有任何 ICE 候选人的情况下发送 offer SDP。 使用if (self.peerConn.iceGatheringState === "complete") ref修复了部分问题。 通过此更改,接收者可以看到发送者的视频。
  2. 从接收方您创建答案并立即发回 SDP。 ICE 候选 collections 在您调用createAnswer()createOffer()后启动。 因此,您发送的 SDP 没有任何 ICE 候选人。
    解决此问题后,另一个问题是在 Sender 端没有onAddStreamstreamEventsChangedHandler处理程序。 因此,发件人永远无法将收到的 stream 设置为相应的<video>元素。
  3. RTCPeerConnection 能够通过相同的连接 object发送接收视频/音频流。 您也可以在 Sender 上设置setRemoteDescription() 您不必维护单独的 Sender 和 Receiver 连接对象。 这里的主要改进可能是将 Sender 和 Receiver 类合并到一个Connection class 中。 这样,您只需在每个参与者端为 n 个参与者创建 n-1 个连接。 在服务器上,您只需要跟踪 n 个连接,而不是 n*(n-1)。
  4. RTCPeerConnection.onaddstream弃用 使用RTCPeerConnection.ontrack 属性
  5. 通过安全通道 (HTTPS) 提供 web 页面。 因为浏览器不会让您的 web 页面通过不安全 (HTTP) 访问媒体硬件。 参考 本地主机(127.0.0.1)是例外。
    您可以在 pom.xml 中配置tomcat7-maven-plugin以在 HTTPs 上提供页面。 设置 HTTPs 的步骤在README.md文件中。
  6. 你需要有更多的超时延迟 2秒非常少。 由于这种直接的 P2P 连接和连接到您的服务器的高延迟,客户端之间的流式传输延迟可能非常低。 因此,如果他们无法连接到服务器并不意味着他们停止了通信。 一旦您在客户端之间建立连接,服务器的角色就结束了,直到他们明确注销。
  7. 由于 Chrome自动播放政策,您无法直接开始播放其他人的视频。 所以不得不在页面上添加一个过度来强制用户交互。 一旦您实施了登录,这将不是问题。
  8. 在创建房间 object 之前获取本地媒体流,最好是在页面加载之后和用户通过覆盖之前。 如果用户延迟提供设备访问权限,您的 Room object 将已经完成与其他对等方的所有连接程序,而不会共享任何本地音频/视频流。 如果您稍后处理它,您将不得不再次将曲目/流添加到所有连接。
  9. 做了一点重组。 在服务器端,我将公共内部类从MeetSessions.java 移动到单独的文件中。 理解代码变得越来越困难。 带有index.html的东西。

    我已经使用 Windows PC、Android 手机和平板电脑测试了 LAN/Wi-Fi 中的代码。 如果您在公共域中托管您的服务器,出于这些原因,您可能还需要TURN服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM