如何通过RTP(实时传输协议)发起SIP(会话发起协议)和传输媒体(语音)[关闭]

问题描述 投票:1回答:1

我正在开发一个项目,我需要编写一个服务器来启动与连接客户端和远程软交换机的SIP会话。一旦会话启动,语音流应使用实时传输协议在端点之间来回传输。鉴于我的上述情况,我有一些关于如何解决这个问题的问题。

1)SIP是如何启动的?我知道SIP通常由IP电信设备中的SIP客户端发起。但是,如果您想以编程方式启动SIP会话,那么如果没有SIP客户端,您又如何做?目前我正在使用Python,所以我遇到了一些库。像simplesip(看起来过于复杂,不确定它是否可以做我想要的),然后有sippy,看起来很有希望。

我还在考虑是否可以通过程序手动创建SIP / SDP数据包并尝试启动SIP会话。我觉得我正试图通过这样做来重新发明轮子。所以我的问题是如何以编程方式启动SIP会话?如果使用库,那么什么是好的库。或者可以在程序中手动创建和发送SIP数据包吗?

2)在SIP期间创建RTP时,如何将此RTP通道引用到远程设备,以便它可以使用此引用的RTP通道?在线研究时,我被告知SIP不提供传输媒体的服务,只是创建一个会话。实际上RTP实时处理繁重的工作。因此,当启动RTP时,这在软件术语中意味着什么。它是一个可以引用设备的对象吗?我怎样才能为这个RTP添加媒体流?

python sip rtp
1个回答
2
投票

1)通过以Internet消息格式(参见RFC 5322)发送和接收消息来完成SIP会话的建立和维护:通常使用UDP或TCP发送的文本消息。这都是关于发送什么消息以及何时发送的消息。 SIP库可以帮助您(以及发送/接收RTP流),但如果您只知道如何发送UDP消息,则可以自己轻松完成。

简而言之:要设置SIP会话,您发送SIP INVITE请求消息,另一方返回SIP INVITE响应消息,您通过发送SIP ACK消息完成会话发起。通常,INVITE请求将在其正文中包含SDP提议,指定客户端愿意/能够接收的媒体类型以及IP地址/端口。然后INVITE响应包含SDP答案,为另一方指定相同的答案。

SIP协议在RFC 3261中的SDP 4566,SDP中描述。如果你稍微谷歌,你可以找到很多SIP通信的例子。

2)你说得对,SIP不提供传输/接收媒体流的服务。 SIP可用于让另一方知道您要设置媒体会话并协商具体细节。发送/接收媒体流必须单独进行;再次,你可以使用一个库或自己做。

RTP流(参见RFC 3550)只是这种媒体流的一个例子。发送RTP流意味着发送连续的RTP数据包流(通常作为UDP数据包的一部分)。每个数据包都包含RTP数据:RTP报头和RTP有效负载(实际音频采样)。

操作模式:发送方对其本地音频进行采样。每当它具有(例如)20ms的音频样本时,它就创建一个RTP分组并将其作为有效载荷发送到UDP分组中。这意味着它每20毫秒发送一个数据包,创建一个数据包流:RTP流。接收方缓冲这些数据包并使用每个数据包中的音频样本重新创建音频。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.