使用 Xmpp 服务器在 xamarin 中开发 VoIP 应用程序

VoIP App development in xamarin with Xmpp Server

我想用 Xamarin 和 Xmpp 服务器开发一个 VoIP 应用程序。 到目前为止,我发现的唯一东西是服务器端的 openfire 和 "jitsi meet" 以及客户端的矩阵。但矩阵与语音流无关,仅用于文本消息,"jitsi meet" 没有任何 .net 客户端的 sdk。 我也找到了 red5pro,但它有客户端 sdks 只适用于本机 android 和 ios 开发平台,没有任何用于 Mono 的东西。

那么我应该寻找什么?!

首先,让我们澄清一些基础知识:

  • openfire 是一个 XMPP 服务器。基本上,这就是您在服务器端获得基本 VoIP 支持所需的全部内容。 备选方案包括 ejabberd and Prosody.
  • jitsi meet 本质上已经是一个 VoIP 应用程序,所以如果您想开发自己的应用程序,您真的不需要它。
  • 另一方面,
  • "Jitsi Videobridge"可用于为视频会议提供中继服务器。对于使用简单的 VoIP 应用程序的第一步,您也不需要它,但如果您希望您的用户能够创建有许多参与者的视频会议,那么这会有所帮助。

    (说明:一般情况下,创建P2P视频会议时, 有两种选择:首先,所有用户将他们的视频数据发送给所有 参与者(每个人都需要大量带宽),或者您选择一个 接收每个视频流的参与者 ("host") 参与者端将它们发送给所有其他参与者。在第二 在这种情况下,普通参与者只需上传一次他的流 下载 n 个流,而主机完成大部分工作 - 所以只有 一个用户需要高带宽。 Jitsi Videobridge 可以 运行 在服务器上充当会议主持人(通常服务器的带宽比家庭用户好得多),因此 none 的参与者必须充当主持人。 在简单的 VoIP 应用程序(没有视频)中,这可能不是必需的,因为音频流通常比视频流小得多。)

现在,正如我上面所说,为了编写一个 VoIP 应用程序,您基本上只需要一个 XMPP 服务器(openfire、prosody 和 ejabberd 都应该足以满足这个用例)、一个支持 Jingle 和 RTP 媒体流的客户端库(传输和显示)。 Jingle 是 XMPP 协议扩展的名称,它支持 协商 P2P 数据流,因为它们是 VoIP 呼叫所需要的。 相关协议规范:

所以您需要找到一个支持 jingle 协议的 XMPP 库。 C# Matrix XMPP SDK(不要与 "Matrix protocol" 混淆,后者是一种不同的协议,除了具有共同的目标外与 XMPP 无关)是此类库的一个示例。根据他们的网站,有对 Jingle 的支持,但我找不到任何关于它的文档。 然而,正如我上面提到的,Jingle 只是关于如何协商数据流,而不是数据流和 VoIP 本身。 因此,该库 可能 可以帮助您解析设置 RTP 数据流所需的 Jingle XMPP 消息。 然而,为了显示和传输 RTP 流,您需要额外的库。为此,请查看以下 SO 问题和答案:

希望我能给你一些有用的提示...