如何在Android上使用WebRTC进行实时通信?

时间:2016-07-30 10:45:36

标签: android websocket webrtc real-time channel-api

我正在开展一个简单的项目,我需要通过互联网通过Android手机Gyroscope Sensor控制Arduino机器人(2个伺服电机)。 正如您可以想象的那样,即使在3D空间中手机的方向变化很小,3轴陀螺仪坐标也会非常灵敏地变化,因此我希望将滞后最小化为毫秒。

现在除了硬件之外,我的第一个里程碑是通过互联网尽可能快地和连续地将Android的陀螺仪坐标发送到计算机(如实时数字数据流)。我知道传统的HTTP based Client-Server机制会非常慢,因此我已经了解了以下内容:

  
      
  1. Google的Chanel API
  2.   
  3. 的WebRTC
  4.   
  5. 的WebSockets
  6.   

根据我的研究,Channel API显示从10ms到偶数秒的延迟。此外,GAE将请求限制为30秒。这是一个Channels API压力测试: http://channelapistresstest.appspot.com/ 尝试点击"发送5" - 按钮,你会看到延迟时间可达数秒。

现在,WebRTC听起来比WebSockets更有前途和更快。如果有人可以指导我在Native JAVA和Native Android中实际实现WebRTC,我将非常感激(任何优秀的图书馆?我想发送coords。来自Android和通过JAVA接收 - 桌面上的SE客户端)。我对Hybrid App解决方案(如Crosswalk)不感兴趣。我还想了解如何设置信令服务器。总结一下,我有以下问题:

  
      
  1. 我应该使用哪种方法? (通道API,WebSockets,WebRTC或其他东西)具有本机Java和Android支持?
  2.   
  3. 如果是WebRTC,我该如何设置信令服务器? (只是简要说明)或WebSocket的WebSocket服务器?
  4.   
  5. 我可以使用Google的云平台或类似的东西来减少我的复杂性吗?
  6.   
  7. 任何整体建议?
  8.   

提前致谢。

2 个答案:

答案 0 :(得分:3)

您不想使用WebRTC。 WebRTC要求你设置一个单独的信令通道,比如WebSockets,所以它对于你想要做的事情来说是不必要的复杂和非常重量级的。

如果您的要求只是将一系列陀螺仪值从设备传送到另一个设备,我建议:

  1. 从简单的套接字服务器开始
  2. 通过socket
  3. 将您的客户端连接到此服务器
  4. 从一个客户端向另一个客户端发送消息
  5. 例如,

    A simple server to print socket input to standard output is just a few lines of Python。这确实需要您学习使用套接字,因为您的客户端需要以相同的方式解释字节流。您也可以使用WebSockets,但这可能会显着增加服务器的复杂性;例如,Java EE比Java SE复杂得多。

    如果你想要数据完整性(我想你这样做),你应该使用TCP。

    如果您真的担心延迟,您还应该跳过上网。在LAN上运行所有内容。我想你无论如何都必须看到设备受到控制,因此没有必要去上网。

答案 1 :(得分:2)

我会忽略WebRTC这个项目。设置起来比较复杂,需要特殊的服务器 WebSocket应该适合这个项目。它与TCP一样快。
如果你想不惜一切代价避免这种延迟,但丢包不是问题,那么我会选择简单的UDP。对于所有这些,您不需要任何库,只需几行代码。