\section{Minimal RTSP implementation}
\label{sec:minimal}


\subsection{Client}

A client implementation MUST be able to do the following :

\begin{itemize}

\item Generate the following requests :
SETUP,  TEARDOWN, and one of PLAY or RECORD. 
If RECORD is implemented,  ANNOUNCE must be implemented as well.

\item Include the following headers in requests:
Connection,  Session, Transport.
If ANNOUNCE is implemented, the capability to include headers 
Content-Language,  Content-Encoding, Content-Length, Content-Type should be
as well.

\item Parse and understand the following headers in responses:
Connection, Session, Transport, Transport-Info, Content-Language, 
Content-Encoding, Content-Length, Content-Type. If RECORD is implemented,
the Location header must be understood as well.

\item Understand the class of each error code received  and notify the
end-user, if one is present, of error codes in classes 4xx and 5xx. The 
notification requirement  may be relaxed if the end-user explicity does not want it for
one or all status codes.

\item Expect and respond to asynchronous requests from the
server, such as ANNOUNCE. This does not necessarily mean  that it should 
implement
the ANNOUNCE method, merely that it MUST respond positively or negatively
to any request received from the server.

\item Understand SDP session descriptions as defined in 
Appendix~\ref{sec:sdpusage}

\item Implement RTP, and accept  one or more  static payload(s) in
RTP AV profile(\cite{rfc1890}). Give an appropriate indication, such as a 
user dialog or log message  if the payload
is not understood.

\end{itemize}

Inclusion of the User-Agent header is recommended.


The following capability sets are defined over and above the minimal 
implementation :

\subsubsection{Basic}
The client MUST additionally be able to do the following:
\begin{itemize}
\item Include and parse the Range header, with ``npt'' units.
\item Generate the PAUSE reqeust.
\item Implement the REDIRECT method, and the Location header.
\item Implement the OPTIONS method, and the Public header.
\end{itemize}
Implementation of DESCRIBE is highly recommended for this case.

\subsubsection{Authentication-enabled}
The client MUST additionally be able to do the following:
\begin{itemize}
\item Recognize the 401 status code.
\item Parse and include the WWW-Authenicate header
\item Implement Basic and Digest authentication
\end{itemize}

\subsection{Server}

A minimal server implementation MUST be able to do the following:

\begin{itemize}

\item Implement SETUP, TEARDOWN, OPTIONS and one of the PLAY or RECORD methods.
If RECORD is implemented, ANNOUNCE should be implemented as well.

\item Include the following headers in responses: Connection, Content-Length,
Content-Type, Content-Language, Content-Encoding, Transport, Transport-Info, Public.
The capability to include the Location header should be implemented if the 
RECORD method is.

\item Parse the following headers in requests: Connection, Session,  Transport

\item Implement RTP transport, and stream or record one or more static payload
type(s) from the RTP AV profile(\cite{rfc1890}). Monitor RTCP requests, and invalidate the session if there is no indication of client liveness.

\end{itemize}

Inclusion of the Server header is recommended.

The following capability sets are defined over and above the minimal 
implementation :

\subsubsection{Basic}
The server MUST additionally be able to do the following:
\begin{itemize}
\item Include and parse the Range header, with ``npt'' units. Implementation
of ``smpte'' units is recommended.
\item Implement  the PAUSE method.
\item Implement the REDIRECT method, and the Location header.
\end{itemize}
Implementation of DESCRIBE and generation of SDP descriptions as defined in
Appendix~\ref{sec:sdpusage} is highly recommended for this case.


\subsubsection{Authentication-enabled}
The server MUST additionally be able to do the following:
\begin{itemize}
\item Generate the 401 status code when authentication is required for the
resource.
\item Parse and include the WWW-Authenicate header
\item Implement Basic and Digest authentication
\end{itemize}

