微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RTSP 公告有什么序列号?

如何解决RTSP 公告有什么序列号?

根据RFC2326,服务器可以随时发送ANNOUNCE消息,客户端必须准备好应答。

但是,不清楚 CSeq 消息包含哪个 ANNOUNCE

当我发送带有方法的请求(例如 PLAYDESCRIBEOPTIONS 等)时,它有一个 cseq 编号,我们称之为 x。我可以相信来自服务器的任何带有 cseq == x 的消息都会响应我的带有序列号 x 的消息吗?

如果不是,那么我怎么能真正知道与我的序列号相同的消息,它实际上是对它的响应?

解决方法

根据 12.17 RFC2326 12.17 CSeq

The CSeq field specifies the sequence number for an RTSP request-
   response pair. This field MUST be present in all requests and
   responses. For every RTSP request containing the given sequence
   number,there will be a corresponding response having the same
   number.

来自服务器的 ANNOUNCE CSeq 消息应该是前一条消息的增量,并且您应该使用来自服务器的 ANNOUNCE CSeq 的 CSeq 进行响应。

您可以相信服务器会使用您在 PLAY、DESCRIBE、OPTIONS 中使用的相同 CSeq 进行响应。

如果服务器向您发送带有序列号 N 的 ANNOUNCE,那么您的 OK 响应中需要包含序列 N。如果您在 OK 之后发送 PLAY 命令 - PLAY 将需要 N+1 作为序列号。例如:

Server->Client:
ANNOUNCE rtsp://192.168.1.2:554/foo RTSP/1.0
CSeq: 42

Client->Server:
RTSP/1.0 200 OK
CSeq: 42

Client->Server:
SETUP rtsp://192.168.1.2:554/foo/bar.foo RTSP/1.0
CSeq: 43

Server->Client:
RTSP/1.0 200 OK
CSeq: 43

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。