如何解决RTSP 公告有什么序列号?
根据RFC2326,服务器可以随时发送ANNOUNCE
消息,客户端必须准备好应答。
但是,不清楚 CSeq
消息包含哪个 ANNOUNCE
。
当我发送带有方法的请求(例如 PLAY
、DESCRIBE
、OPTIONS
等)时,它有一个 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 举报,一经查实,本站将立刻删除。