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

如何在Android上使用WebRTC进行实时通信?,android,websocket,webrtc,real-time,channel-api,Android,Websocket,Webrtc,Real Time,Channel Api,我正在做一个简单的项目,在这个项目中,我需要通过互联网通过Android手机的陀螺仪传感器来控制一个Arduino机器人(2个伺服电机)。 正如你们所看到的,即使手机在3D空间的方位变化很小,三轴陀螺坐标也会非常敏感地变化,所以我想把滞后时间减少到毫秒 现在,除了硬件,我的第一个里程碑是通过互联网尽可能快速、连续地(像实时数字数据流)将陀螺仪坐标从Android发送到计算机。我知道传统的基于HTTP的客户机-服务器机制将非常缓慢,因此我研究了以下内容: 谷歌的香奈儿API WebRTC 网袋 根

我正在做一个简单的项目,在这个项目中,我需要通过互联网通过
Android
手机的
陀螺仪传感器来控制一个Arduino机器人(2个伺服电机)。
正如你们所看到的,即使手机在3D空间的方位变化很小,三轴陀螺坐标也会非常敏感地变化,所以我想把滞后时间减少到毫秒

现在,除了硬件,我的第一个里程碑是通过互联网尽可能快速、连续地(像实时数字数据流)将陀螺仪坐标从Android发送到计算机。我知道传统的基于HTTP的客户机-服务器机制将非常缓慢,因此我研究了以下内容:

  • 谷歌的香奈儿API
  • WebRTC
  • 网袋
  • 根据我的研究,Channel API显示延迟从10毫秒到甚至几秒钟不等。GAE还将请求限制为30秒。下面是通道API压力测试: 试着点击“发送5”按钮,你会看到延迟数上升到几秒钟

    现在WebRTC听起来比WebSockets更有前途,速度也更快。如果有人能指导我在本机JAVA和本机Android中实际实现WebRTC,我将不胜感激(有好的库吗?我想从Android发送coords.并通过桌面上的JAVA-SE客户端接收)。我对混合应用程序解决方案不感兴趣(比如
    人行横道
    )。我还想知道如何设置信令服务器。总结起来,我有以下问题:

  • 我应该使用哪种方法?(Channel API、WebSockets、WebRTC或其他)是否支持本机Java和android
  • 对于WebRTC,我应该如何设置信令服务器?(只是简单的描述)还是WebSocket的WebSocket服务器
  • 我可以利用谷歌的云平台或类似的东西来降低我这边的复杂性吗
  • 有什么总体建议吗

  • 提前感谢。

    对于这个项目,我将忽略WebRTC。安装起来更复杂,需要一个特殊的服务器。
    WebSocket应该适合这个项目。它与TCP一样快。

    如果您想不惜一切代价避免这种延迟,但数据包丢失不是问题,那么我会选择简单的UDP。对于所有这些,您不需要任何库,只需要几行代码。

    对于这个项目,我将忽略WebRTC。安装起来更复杂,需要一个特殊的服务器。
    WebSocket应该适合这个项目。它与TCP一样快。

    如果您想不惜一切代价避免这种延迟,但数据包丢失不是问题,那么我会选择简单的UDP。对于所有这些,您不需要任何库,只需要几行代码。

    您不想使用WebRTC。WebRTC要求您设置一个单独的信号通道,比如WebSockets,因此对于您正在尝试的工作来说,它是不必要的复杂和非常重的

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

  • 从一个简单的套接字服务器开始
  • 通过网络将客户端连接到此服务器
  • 将消息从一个客户端中继到另一个客户端
  • 例如。这确实需要您学习使用套接字,因为您的客户机需要以相同的方式解释字节流。您也可以使用WebSocket,但这可能会显著增加服务器的复杂性;例如,JavaEE比JavaSE复杂得多

    如果您想要数据完整性(我想您需要),您应该使用TCP


    如果你真的担心延迟,你也应该跳过上网。在局域网上运行一切。我想你必须看到设备处于控制之下,所以上网没有意义

    您不想使用WebRTC。WebRTC要求您设置一个单独的信号通道,比如WebSockets,因此对于您正在尝试的工作来说,它是不必要的复杂和非常重的

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

  • 从一个简单的套接字服务器开始
  • 通过网络将客户端连接到此服务器
  • 将消息从一个客户端中继到另一个客户端
  • 例如。这确实需要您学习使用套接字,因为您的客户机需要以相同的方式解释字节流。您也可以使用WebSocket,但这可能会显著增加服务器的复杂性;例如,JavaEE要比JavaSE复杂得多

    如果您想要数据完整性(我想您需要),您应该使用TCP


    如果你真的担心延迟,你也应该跳过上网。在局域网上运行一切。我想你必须看到设备处于控制之下,所以上网没有意义

    如果你仍然需要这个函数,我认为你要寻找的每件事都有一个细节:如果你仍然需要这个函数,我认为你要寻找的每件事都有一个细节: