【问题标题】:Connecting two Android devices using RTP without any server needed使用 RTP 连接两台 Android 设备,无需任何服务器
【发布时间】:2015-02-15 00:37:22
【问题描述】:

我正在开发一种 VoIP 服务,其中两个设备可以进行音频对话。 我一直在阅读诸如 SIP 之类的信令协议。我了解 SIP 的强大功能,但我更喜欢拥有自己的信令协议,因为我的服务非常基础,不需要 SIP 的全部功能。

据我了解,SIP等协议的主要目的是查找对方的地址。我可以从我的服务器获取此信息,因此这里不需要 SIP。

从调用者建立连接应该相对容易。

我面临的问题是:如何让被调用的 Android 系统侦听特定于我的应用的 RTP 数据包?我需要这个,所以我可以启动一个意图来处理接听电话等。

有人建议使用 ServerSocket,但我没有使用 TCP,我正在尝试建立客户端到客户端的连接,而不是服务器-客户端的连接。

【问题讨论】:

    标签: android sockets udp sip rtp


    【解决方案1】:

    SIP 不仅用于查找对方的 IP 地址,还用于约定媒体通信所涉及的端口。

    对于一对一通话,当主叫建立连接时,它会向被叫 IP 和 SIP 端口发送 SIP INVITE。调用者知道该 IP,因为它可以从注册服务器(例如)查询它。

    从主叫方发送给被叫方的SIP INVITE有主叫方的RTP/RTCP端口存储在SIP INVITE消息的SDP载荷中。

    当被叫收到 SIP INVITE 时,会立即用 180 Ringing 回应主叫,然后被叫可能会显示一个警报,指示收到来电。假设用户接受呼叫 200 OK 被生成并发送给呼叫者。此 200 OK 消息具有带有 RTP/RTCP 端口的 SDP 有效负载,被调用者将使用这些端口来侦听媒体数据包。当调用方收到 200 OK 时,双方都知道将用于通信的端口。

    如果我是你,我不会发明任何协议。我宁愿尝试使用 3rd 方库,例如 pjsip、sofia-sip 或一些 Android SIP 堆栈。

    如果不是这种情况,我会尝试使上述消息流适应您的协议。问题是调用者必须提前知道被调用者的IP和端口,信令消息必须发送到哪里。如果不涉及任何服务器(查询被叫端口和 IP),这可能很难实现。

    【讨论】:

    • 感谢您的回答。我会选择 SIP,因为重新发明类似的东西需要时间和精力。
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    相关资源
    最近更新 更多