Asterisk SIP提供-应答模型

Asterisk SIP提供-应答模型,asterisk,sip,Asterisk,Sip,我对SIP提供-应答模型感到困惑。情况是这样的 我用asterisk server在客户端配置了两个帐户(比如A和B),并从A打电话给B A的帐户详细信息 客户端(应用程序):具有视频编解码器H264、音频编解码器G722、G711的 服务器端(星号):无视频编解码器、音频编解码器G722、G711 B的帐户详细信息 客户端(应用):无视频编解码器、音频编解码器G722、G711 服务器端(星号):无视频编解码器、音频编解码器G722、G711 在第一次邀请(报价)中,我发送带有“m=”音频和视

我对SIP提供-应答模型感到困惑。情况是这样的

我用asterisk server在客户端配置了两个帐户(比如A和B),并从A打电话给B

A的帐户详细信息

客户端(应用程序):具有视频编解码器H264、音频编解码器G722、G711的

服务器端(星号):无视频编解码器、音频编解码器G722、G711

B的帐户详细信息

客户端(应用):无视频编解码器、音频编解码器G722、G711

服务器端(星号):无视频编解码器、音频编解码器G722、G711

在第一次邀请(报价)中,我发送带有“m=”音频和视频参数(视频端口为52162)的SDP,asterisk发送带有“m=”音频和视频参数(视频端口为0)的答案(183会话进度和200 OK)(因为asterisk没有任何视频编解码器)

从应用程序方面,我将发送下一个邀请,以使呼叫暂停。为此,我将仅为音频发送一个=sendonly和“m=”参数


我的疑问是“我能否从应用程序端避免”m=“第二次邀请的视频参数(在我的情况下是保持)”,如果我第一次邀请的视频端口为0,那么我将得到答案。

SIP提供/回答模型要求您在会话的所有修改中以相同的顺序重复使用所有m=

唯一允许的操作是在现有的m=行下方添加额外的m=行

在您的用例中,如果您没有包含m=video行,则远端应该拒绝您的邀请

编辑:以下是rfc中的确切措辞,清楚地显示了永不删除任何m=行的要求:

从rfc3264部分修改会话

If an SDP is offered, which is different from the previous SDP, the
new SDP MUST have a matching media stream for each media stream in
the previous SDP.  In other words, if the previous SDP had N "m="
lines, the new SDP MUST have at least N "m=" lines.  The i-th media
stream in the previous SDP, counting from the top, matches the i-th
media stream in the new SDP, counting from the top.  This matching is
necessary in order for the answerer to determine which stream in the
new SDP corresponds to a stream in the previous SDP.  Because of
these requirements, the number of "m=" lines in a stream never
decreases, but either stays the same or increases.  Deleted media
streams from a previous SDP MUST NOT be removed in a new SDP;
however, attributes for these streams need not be present.

作为旁注,指出m=行类型(音频、视频等)可能被修改的例外情况很有用:它在第8.3.3节“更改媒体类型”中提供。此例外情况非常具体,不适用于99,99%。。。(rfc中的示例是语音带传真到传真)

这并不总是正确的。实际上这是推荐的,但应用程序可以自己做(就像xlite在call do中间的视频)@arheops:我已经编辑了我的答案,并添加了rfc3264中的清晰语句。我认为我的答案是正确的!我也从未在xlite中看到过不同的行为?如果我遗漏了什么,请告诉我…我的答案是正确的。这是一个行为良好的UA应该做的。但是,我同意@arheops的观点,即如果您不严格遵守这些规则,那么有许多UAs和网络元素将不会介意。@jsantander:您是对的!接受失败的SDP并不是那么糟糕!在发送的内容上要保守,在接受的内容上要自由:这意味着你可以接受被破坏的SDP。但仍然不能发送损坏的SDP(这是个问题!)。