RTSP Announcement 的序号是什么?

What sequence number will an RTSP Announce have?

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

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

当我用一个方法发送请求时(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