RTSP Interoperability Test Matrix

A table formatted as follows should be filled out for each client server combination.
Feature Correct behavior
Both Support Client Doesn't Support Server Doesn't Support
Client Server Client Server Client Server
Feature yes/no on support of each feature
This is a list of the features and an explanation of each.
Feature Explanation
1-1-n 1-1-n refers to one DESCRIBE message resulting in one RTSP session (defined by the "Session:" header), which may have multiple streams in it. If the server supports this feature, then the client should be able to issue SETUP messages with "Session:" headers which map to existing sessions. Furthermore, the client should be able to issue PLAY and PAUSE messages that play and pause all streams associated with a particular session.
Null SETUP Null SETUP is the ability to send a SETUP without a "Transport" field defined. This allows a client to pipeline DESCRIBE and SETUP, saving a roundtrip in 1-1-n situations. Servers should either return a session id, or error XXX.
Audio only Given an A/V clip, the client may only support the audio type given. Against servers that support individual streaming of aggregate streams, the client should be able to request the audio portion only. If the stream is an aggregate stream and the server does not support sending only one part of an aggregate resource, then the client must be able to handle error 460 Only aggregate operation allowed.
Video only Given an A/V clip, the client may only support the video type given. Against servers that support individual streaming of aggregate streams, the client should be able to request the video portion only. If the stream is an aggregate stream and the server does not support sending only one part of an aggregate resource, then the client must be able to handle error 460 Only aggregate operation allowed.
Response codes Tests should be done to determine if RTSP entities properly support the following response codes:
   100 Continue XXX
   200 OK One would hope that "OK" doesn't throw implementations too far afield.
   201 Created XXX Presumably for recording. Should be supported for ANNOUNCE method from client to server.
   300 Multiple Choices XXX
   301 Moved Permanently Ye olde redirect message. If the client or proxy caches redirects, this should be the only redirect that is cached.
   302 Moved Temporarily These are redirect message that should never be cached.
   303 See Other XXX
   305 Use Proxy Specialized redirect for proxies. The client is not expected to use this as a permanent proxy.
   400 Bad Request XXX There are any number of tests that will probably result in this response. Perhaps there should be a list of tests in place of this.
   401 Unauthorized All clients should try to access authenticated content.
   402 Payment Required XXX Reserved for future use.
   403 Forbidden Try getting a piece of content for which the permissions are not set for access by the server process.
   404 Not Found Try accessing an URL which is not on the server.
   405 Method Not Allowed Try using a method which the server does not recognize. For instance, try recording to a server which only supports playback (and hence, doesn't support the RECORD method).
   406 Not Acceptable This is in response to a DESCRIBE request for a session description in formats not recognized by the server.
   407 Proxy Authentication Required Try hooking up to via a proxy which requires authentication.
   408 Request Timeout XXX
   409 Conflict XXX
   410 Gone XXX
   411 Length Required XXX
   412 Precondition Failed XXX
   413 Request Entity Too Large XXX
   414 Request-URI Too Long XXX
   415 Unsupported Media Type This response code should only be in response to the ANNOUNCE method.
   451 Invalid parameter XXX
   452 Illegal Conference Identifier XXX
   453 Not Enough Bandwidth XXX
   454 Session not found XXX
   455 Method Not Valid In This State XXX
   456 Header Field Not Valid XXX
   457 Invalid Range XXX
   458 Parameter Is Read-Only XXX
   459 Aggregate operation not allowed XXX
   460 Only aggregate operation allowed XXX
   500 Internal Server Error XXX
   501 Not Implemented XXX
   502 Bad Gateway XXX
   503 Service Unavailable XXX
   504 Gateway Timeout XXX
   505 RTSP Version Not Supported This is going to be a very important behavior to nail down. Clients and servers should behave consistantly on this method when version numbers do not match.
Header Fields  Applicability to each of the RTSP methods. Server to reply with "Header invalid" when the header does not make sense for the method per table in Section 12 of draft-04.
   Accept  Server should parse and honor if possible i.e. return a description of the correct type. 
   Accept-Encoding   Server should parse and honor if possible i.e. return a description of the correct encoding.
   Accept-Language  Server should parse and honor if possible i.e. return a description of the correct language.
   Allow  Server may include in  a reply to a request that fails when  the method is not allowed on the resource. Clients that parse it should reattempt only one of the allowed methods.
   Authorization  Clients that support authentication must include when challenged by a 401 Unauthorized status.
   Bandwidth  Client may include as a hint to the server. Servers that parse it may base a selection on it.
   Blocksize  Client may include as a hint to the server. Servers that parse it use it as a hint for the transport packet size.
   Cache-Control 
   Conference  Servers that support it must maintain a mapping of identifiers to conference details, comply with the RTSP request and reply with "Conference not found" when appropriate. 
   Connection  Client : Include keep-alive if it wants a persistent connection. If not, be prepared for Connection:close. 
Server: Respect client requested keep-alive. Include Connection:close if it does not intend to keep the connection persistent.
   Content-Base  Servers to include if necessary when urls in Session descriptions are relative. Client to recognize and construct absolute urls.
   Content-Encoding  Server to include, client to parse and then handle message body. Reverse in case of ANNOUNCE.
   Content-Language  Server to include, client to parse and then handle message body.Reverse in case of ANNOUNCE.
   Content-Length  Server to include, client to parse and then handle message body.Reverse in case of ANNOUNCE.
   Content-Location   Servers to include if necessary when urls in Session descriptions are relative. Client to recognize and construct absolute urls.
   Content-Type  Server to include, client to parse and then handle message body.Reverse in case of ANNOUNCE.
   CSeq  Request originator to include, responder to include the same header in the response.
   Date  Included by either side, informational. Must follow the format in RFC2068.
   Expires  May be included by the server. If the client supports it, it must not send a request for the same URL after the expire time.
   From  XXX 
   Host  Not required, to be ignored.
   If-Match  Requester may include, responder must make the request conditional and respond with 3xx as necessary. On receipt of a 3xx, the requester may use a local copy of the resource. 
   If-Modified-Since  Requester may include, responder must make the request conditional and respond with 3xx as necessary. On receipt of a 3xx, the requester may use a local copy of the resource. 
   Last-Modified  Responder to include if it supports it.
   Location  To be included with redirect responses or requests.
   Proxy-Authenticate  XXX 
   Proxy-Require  Proxies to necessarily parse and respond negatively if the feature requested is not supported.
   Public  Included by responder to indicate methods that are valid for the resource or the server(for OPTIONS).
   Range  Client may include it supports seeks or random access. If  it supports  random-access, server should parse and respond properly i.e. if correct, comply and if incorrect, reply with 457. Support for npt units is mandatory.
   Referer  XXX 
   Retry-After  Server to inlcude if the resource will be available after a while. Client to retry the request only at the appropriate time. 
   Require  Client to include if it needs support for a certain feature. Server to necessarily parse and respond negatively if the feature in question is not supported.
   RTP-Info  Server to necessarily include when all of the following are true: 
-Transport chosen is RTP 
-It is the very first play for a resource or the first play after a pause. 

In case of queued PLAY, the server may choose not to include it.

   Scale  Client may include it to support features such as fast-forward. Server to reply with "Not implemented" if the feature is not supported, or reply back with the exact chosen Scale that may be slightly different from the requested scale.
   Speed  Client may include it to support features such as fast-forward. Server to reply with "Not implemented" if the feature is not supported, or reply back with the exact chosen speed that may be slightly different from the requested speed. 
   Server  May be included by the server for informational purposes only.
   Session  Pretty core and fundamental behaviour. Client should inlcude this header. Server to use it to reference sessions and their state and respond with "Session not found" when necssary. Client should be prepared for this error message.
   Timestamp  Client may include if it desires to perform RTT calculation. At minimum, server to echo back the header.
   Transport  Both sides need to support it per the letter of draft-04.
   Unsupported  Server must include if it does not support the feature specifed in a Require:  request header. Same applies to proxies, but with the Proxy-Require request header.
   User-Agent  Client may include on an informational basis.
   Vary  XXX 
   Via  XXX 
   WWW-Authenticate  Server must include with 401 responses.If it supports authentication, the client must resend the request with a Authorization header containing credentials in the right realm.
Client and server match datatypes on some, but not all streams on 1-1-n  Server must send 460/461 as appropriate. Client must understand the "aggregate/no-aggregate" status codes.
Client and server don't match any datatypes on 1-1-n  Client should gracefully refuse.
Proxy  XXX 
Connection header/Keep-alive.  Clients may inlcude Connection headers, in which case server is expected to comply. If the server does not wish to keep a persistent connection, it must include the Connection: close header.
Test per header  Test servers for header applicability on a per method basis.
Different permutations of supported transports  Check support for RTP/AVP/UDP with unicast/multicast flags. 
Check support or lack of support for RTP/AVP/TCP.
Minimal test case:  XXX 
RTSP control over TCP with support for PLAY mode 
RTP transport over UDP, unicast only 
 
Datatypes(compliant with RFC 1890)  Note that this is not a "minimal" set of data types required to be supported  for the bakeoff. However, attendees are expected to support atleast one or more of these in order to make the tests useful.
   ulaw  XXX 
   Motion JPEG  XXX 
   H.261  XXX 
   GSM  XXX 
   alaw  XXX 
   L8  XXX 
   L16  XXX 
   G.723  XXX 

Last modified: Mon Oct 13 15:58:39 Pacific Daylight Time 1997