FFmpeg
rtsp.h
Go to the documentation of this file.
1 /*
2  * RTSP definitions
3  * Copyright (c) 2002 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 #ifndef AVFORMAT_RTSP_H
22 #define AVFORMAT_RTSP_H
23 
24 #include <stdint.h>
25 #include "avformat.h"
26 #include "rtspcodes.h"
27 #include "rtpdec.h"
28 #include "network.h"
29 #include "httpauth.h"
30 #include "internal.h"
31 #include "os_support.h"
32 
33 #include "libavutil/log.h"
34 #include "libavutil/opt.h"
35 
36 /**
37  * Network layer over which RTP/etc packet data will be transported.
38  */
40  RTSP_LOWER_TRANSPORT_UDP = 0, /**< UDP/unicast */
41  RTSP_LOWER_TRANSPORT_TCP = 1, /**< TCP; interleaved in RTSP */
42  RTSP_LOWER_TRANSPORT_UDP_MULTICAST = 2, /**< UDP/multicast */
44  RTSP_LOWER_TRANSPORT_HTTP = 8, /**< HTTP tunneled - not a proper
45  transport mode as such,
46  only for use via AVOptions */
47  RTSP_LOWER_TRANSPORT_HTTPS, /**< HTTPS tunneled */
48  RTSP_LOWER_TRANSPORT_CUSTOM = 16, /**< Custom IO - not a public
49  option for lower_transport_mask,
50  but set in the SDP demuxer based
51  on a flag. */
52 };
53 
54 /**
55  * Packet profile of the data that we will be receiving. Real servers
56  * commonly send RDT (although they can sometimes send RTP as well),
57  * whereas most others will send RTP.
58  */
60  RTSP_TRANSPORT_RTP, /**< Standards-compliant RTP */
61  RTSP_TRANSPORT_RDT, /**< Realmedia Data Transport */
62  RTSP_TRANSPORT_RAW, /**< Raw data (over UDP) */
64 };
65 
66 /**
67  * Transport mode for the RTSP data. This may be plain, or
68  * tunneled, which is done over HTTP.
69  */
71  RTSP_MODE_PLAIN, /**< Normal RTSP */
72  RTSP_MODE_TUNNEL /**< RTSP over HTTP (tunneling) */
73 };
74 
75 #define RTSP_DEFAULT_PORT 554
76 #define RTSPS_DEFAULT_PORT 322
77 #define RTSP_MAX_TRANSPORTS 8
78 #define RTSP_DEFAULT_AUDIO_SAMPLERATE 44100
79 #define RTSP_RTP_PORT_MIN 5000
80 #define RTSP_RTP_PORT_MAX 65000
81 #define SDP_MAX_SIZE 16384
82 
83 /**
84  * This describes a single item in the "Transport:" line of one stream as
85  * negotiated by the SETUP RTSP command. Multiple transports are comma-
86  * separated ("Transport: x-read-rdt/tcp;interleaved=0-1,rtp/avp/udp;
87  * client_port=1000-1001;server_port=1800-1801") and described in separate
88  * RTSPTransportFields.
89  */
90 typedef struct RTSPTransportField {
91  /** interleave ids, if TCP transport; each TCP/RTSP data packet starts
92  * with a '$', stream length and stream ID. If the stream ID is within
93  * the range of this interleaved_min-max, then the packet belongs to
94  * this stream. */
96 
97  /** UDP multicast port range; the ports to which we should connect to
98  * receive multicast UDP data. */
100 
101  /** UDP client ports; these should be the local ports of the UDP RTP
102  * (and RTCP) sockets over which we receive RTP/RTCP data. */
104 
105  /** UDP unicast server port range; the ports to which we should connect
106  * to receive unicast UDP RTP/RTCP data. */
108 
109  /** time-to-live value (required for multicast); the amount of HOPs that
110  * packets will be allowed to make before being discarded. */
111  int ttl;
112 
113  /** transport set to record data */
115 
116  struct sockaddr_storage destination; /**< destination IP address */
117  char source[INET6_ADDRSTRLEN + 1]; /**< source IP address */
118 
119  /** data/packet transport protocol; e.g. RTP or RDT */
121 
122  /** network layer transport protocol; e.g. TCP or UDP uni-/multicast */
125 
126 /**
127  * This describes the server response to each RTSP command.
128  */
129 typedef struct RTSPMessageHeader {
130  /** length of the data following this header */
132 
133  enum RTSPStatusCode status_code; /**< response code from server */
134 
135  /** number of items in the 'transports' variable below */
137 
138  /** Time range of the streams that the server will stream. In
139  * AV_TIME_BASE unit, AV_NOPTS_VALUE if not used */
141 
142  /** describes the complete "Transport:" line of the server in response
143  * to a SETUP RTSP command by the client */
145 
146  int seq; /**< sequence number */
147 
148  /** the "Session:" field. This value is initially set by the server and
149  * should be re-transmitted by the client in every RTSP command. */
150  char session_id[512];
151 
152  /** the "Location:" field. This value is used to handle redirection.
153  */
154  char location[4096];
155 
156  /** the "RealChallenge1:" field from the server */
157  char real_challenge[64];
158 
159  /** the "Server: field, which can be used to identify some special-case
160  * servers that are not 100% standards-compliant. We use this to identify
161  * Windows Media Server, which has a value "WMServer/v.e.r.sion", where
162  * version is a sequence of digits (e.g. 9.0.0.3372). Helix/Real servers
163  * use something like "Helix [..] Server Version v.e.r.sion (platform)
164  * (RealServer compatible)" or "RealServer Version v.e.r.sion (platform)",
165  * where platform is the output of $uname -msr | sed 's/ /-/g'. */
166  char server[64];
167 
168  /** The "timeout" comes as part of the server response to the "SETUP"
169  * command, in the "Session: <xyz>[;timeout=<value>]" line. It is the
170  * time, in seconds, that the server will go without traffic over the
171  * RTSP/TCP connection before it closes the connection. To prevent
172  * this, sent dummy requests (e.g. OPTIONS) with intervals smaller
173  * than this value. */
174  int timeout;
175 
176  /** The "Notice" or "X-Notice" field value. See
177  * http://tools.ietf.org/html/draft-stiemerling-rtsp-announce-00
178  * for a complete list of supported values. */
179  int notice;
180 
181  /** The "reason" is meant to specify better the meaning of the error code
182  * returned
183  */
184  char reason[256];
185 
186  /**
187  * Content type header
188  */
189  char content_type[64];
190 
191  /**
192  * SAT>IP com.ses.streamID header
193  */
194  char stream_id[64];
196 
197 /**
198  * Client state, i.e. whether we are currently receiving data (PLAYING) or
199  * setup-but-not-receiving (PAUSED). State can be changed in applications
200  * by calling av_read_play/pause().
201  */
203  RTSP_STATE_IDLE, /**< not initialized */
204  RTSP_STATE_STREAMING, /**< initialized and sending/receiving data */
205  RTSP_STATE_PAUSED, /**< initialized, but not receiving data */
206  RTSP_STATE_SEEKING, /**< initialized, requesting a seek */
207 };
208 
209 /**
210  * Identify particular servers that require special handling, such as
211  * standards-incompliant "Transport:" lines in the SETUP request.
212  */
214  RTSP_SERVER_RTP, /**< Standards-compliant RTP-server */
215  RTSP_SERVER_REAL, /**< Realmedia-style server */
216  RTSP_SERVER_WMS, /**< Windows Media server */
217  RTSP_SERVER_SATIP,/**< SAT>IP server */
219 };
220 
221 /**
222  * Private data for the RTSP demuxer.
223  *
224  * @todo Use AVIOContext instead of URLContext
225  */
226 typedef struct RTSPState {
227  const AVClass *class; /**< Class for private options. */
228  URLContext *rtsp_hd; /* RTSP TCP connection handle */
229 
230  /** number of items in the 'rtsp_streams' variable */
232 
233  struct RTSPStream **rtsp_streams; /**< streams in this session */
234 
235  /** indicator of whether we are currently receiving data from the
236  * server. Basically this isn't more than a simple cache of the
237  * last PLAY/PAUSE command sent to the server, to make sure we don't
238  * send 2x the same unexpectedly or commands in the wrong state. */
240 
241  /** the seek value requested when calling av_seek_frame(). This value
242  * is subsequently used as part of the "Range" parameter when emitting
243  * the RTSP PLAY command. If we are currently playing, this command is
244  * called instantly. If we are currently paused, this command is called
245  * whenever we resume playback. Either way, the value is only used once,
246  * see rtsp_read_play() and rtsp_read_seek(). */
248 
249  int seq; /**< RTSP command sequence number */
250 
251  /** copy of RTSPMessageHeader->session_id, i.e. the server-provided session
252  * identifier that the client should re-transmit in each RTSP command */
253  char session_id[512];
254 
255  /** copy of RTSPMessageHeader->timeout, i.e. the time (in seconds) that
256  * the server will go without traffic on the RTSP/TCP line before it
257  * closes the connection. */
258  int timeout;
259 
260  /** timestamp of the last RTSP command that we sent to the RTSP server.
261  * This is used to calculate when to send dummy commands to keep the
262  * connection alive, in conjunction with timeout. */
264 
265  /** the negotiated data/packet transport protocol; e.g. RTP or RDT */
267 
268  /** the negotiated network layer transport protocol; e.g. TCP or UDP
269  * uni-/multicast */
271 
272  /** brand of server that we're talking to; e.g. WMS, REAL or other.
273  * Detected based on the value of RTSPMessageHeader->server or the presence
274  * of RTSPMessageHeader->real_challenge */
276 
277  /** the "RealChallenge1:" field from the server */
278  char real_challenge[64];
279 
280  /** plaintext authorization line (username:password) */
281  char auth[128];
282 
283  /** authentication state */
285 
286  /** The last reply of the server to a RTSP command */
287  char last_reply[2048]; /* XXX: allocate ? */
288 
289  /** RTSPStream->transport_priv of the last stream that we read a
290  * packet from */
292 
293  /** The following are used for Real stream selection */
294  //@{
295  /** whether we need to send a "SET_PARAMETER Subscribe:" command */
297 
298  /** stream setup during the last frame read. This is used to detect if
299  * we need to subscribe or unsubscribe to any new streams. */
301 
302  /** current stream setup. This is a temporary buffer used to compare
303  * current setup to previous frame setup. */
305 
306  /** the last value of the "SET_PARAMETER Subscribe:" RTSP command.
307  * this is used to send the same "Unsubscribe:" if stream setup changed,
308  * before sending a new "Subscribe:" command. */
309  char last_subscription[1024];
310  //@}
311 
312  /** The following are used for RTP/ASF streams */
313  //@{
314  /** ASF demuxer context for the embedded ASF stream from WMS servers */
316 
317  /** cache for position of the asf demuxer, since we load a new
318  * data packet in the bytecontext for each incoming RTSP packet. */
319  uint64_t asf_pb_pos;
320  //@}
321 
322  /** some MS RTSP streams contain a URL in the SDP that we need to use
323  * for all subsequent RTSP requests, rather than the input URI; in
324  * other cases, this is a copy of AVFormatContext->filename. */
326 
327  /** The following are used for parsing raw mpegts in udp */
328  //@{
329  struct MpegTSContext *ts;
332  //@}
333 
334  /** Additional output handle, used when input and output are done
335  * separately, eg for HTTP tunneling. */
337 
338  /** RTSP transport mode, such as plain or tunneled. */
340 
341  /* Number of RTCP BYE packets the RTSP session has received.
342  * An EOF is propagated back if nb_byes == nb_streams.
343  * This is reset after a seek. */
344  int nb_byes;
345 
346  /** Reusable buffer for receiving packets */
347  uint8_t* recvbuf;
348 
349  /**
350  * A mask with all requested transport methods
351  */
353 
354  /**
355  * The number of returned packets
356  */
357  uint64_t packets;
358 
359  /**
360  * Polling array for udp
361  */
362  struct pollfd *p;
363  int max_p;
364 
365  /**
366  * Whether the server supports the GET_PARAMETER method.
367  */
369 
370  /**
371  * Do not begin to play the stream immediately.
372  */
374 
375  /**
376  * Option flags for the chained RTP muxer.
377  */
379 
380  /** Whether the server accepts the x-Dynamic-Rate header */
382 
383  /**
384  * Various option flags for the RTSP muxer/demuxer.
385  */
387 
388  /**
389  * Mask of all requested media types
390  */
392 
393  /**
394  * Minimum and maximum local UDP ports.
395  */
397 
398  /**
399  * Timeout to wait for incoming connections.
400  */
402 
403  /**
404  * timeout of socket i/o operations.
405  */
407 
408  /**
409  * Size of RTP packet reordering queue.
410  */
412 
413  /**
414  * User-Agent string
415  */
416  char *user_agent;
417 
418  char default_lang[4];
420  int pkt_size;
421  char *localaddr;
422 } RTSPState;
423 
424 #define RTSP_FLAG_FILTER_SRC 0x1 /**< Filter incoming UDP packets -
425  receive packets only from the right
426  source address and port. */
427 #define RTSP_FLAG_LISTEN 0x2 /**< Wait for incoming connections. */
428 #define RTSP_FLAG_CUSTOM_IO 0x4 /**< Do all IO via the AVIOContext. */
429 #define RTSP_FLAG_RTCP_TO_SOURCE 0x8 /**< Send RTCP packets to the source
430  address of received packets. */
431 #define RTSP_FLAG_PREFER_TCP 0x10 /**< Try RTP via TCP first if possible. */
432 #define RTSP_FLAG_SATIP_RAW 0x20 /**< Export SAT>IP stream as raw MPEG-TS */
433 
434 typedef struct RTSPSource {
435  char addr[128]; /**< Source-specific multicast include source IP address (from SDP content) */
436 } RTSPSource;
437 
438 /**
439  * Describe a single stream, as identified by a single m= line block in the
440  * SDP content. In the case of RDT, one RTSPStream can represent multiple
441  * AVStreams. In this case, each AVStream in this set has similar content
442  * (but different codec/bitrate).
443  */
444 typedef struct RTSPStream {
445  URLContext *rtp_handle; /**< RTP stream handle (if UDP) */
446  void *transport_priv; /**< RTP/RDT parse context if input, RTP AVFormatContext if output */
447 
448  /** corresponding stream index, if any. -1 if none (MPEG2TS case) */
450 
451  /** interleave IDs; copies of RTSPTransportField->interleaved_min/max
452  * for the selected transport. Only used for TCP. */
454 
455  char control_url[MAX_URL_SIZE]; /**< url for this stream (from SDP) */
456 
457  /** The following are used only in SDP, not RTSP */
458  //@{
459  int sdp_port; /**< port (from SDP content) */
460  struct sockaddr_storage sdp_ip; /**< IP address (from SDP content) */
461  int nb_include_source_addrs; /**< Number of source-specific multicast include source IP addresses (from SDP content) */
462  struct RTSPSource **include_source_addrs; /**< Source-specific multicast include source IP addresses (from SDP content) */
463  int nb_exclude_source_addrs; /**< Number of source-specific multicast exclude source IP addresses (from SDP content) */
464  struct RTSPSource **exclude_source_addrs; /**< Source-specific multicast exclude source IP addresses (from SDP content) */
465  int sdp_ttl; /**< IP Time-To-Live (from SDP content) */
466  int sdp_payload_type; /**< payload type */
467  //@}
468 
469  /** The following are used for dynamic protocols (rtpdec_*.c/rdt.c) */
470  //@{
471  /** handler structure */
473 
474  /** private data associated with the dynamic protocol */
476  //@}
477 
478  /** Enable sending RTCP feedback messages according to RFC 4585 */
479  int feedback;
480 
481  /** SSRC for this stream, to allow identifying RTCP packets before the first RTP packet */
482  uint32_t ssrc;
483 
484  char crypto_suite[40];
485  char crypto_params[100];
486 } RTSPStream;
487 
489  RTSPMessageHeader *reply, const char *buf,
490  RTSPState *rt, const char *method);
491 
492 /**
493  * Send a command to the RTSP server without waiting for the reply.
494  *
495  * @see rtsp_send_cmd_with_content_async
496  */
497 int ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method,
498  const char *url, const char *headers);
499 
500 /**
501  * Send a command to the RTSP server and wait for the reply.
502  *
503  * @param s RTSP (de)muxer context
504  * @param method the method for the request
505  * @param url the target url for the request
506  * @param headers extra header lines to include in the request
507  * @param reply pointer where the RTSP message header will be stored
508  * @param content_ptr pointer where the RTSP message body, if any, will
509  * be stored (length is in reply)
510  * @param send_content if non-null, the data to send as request body content
511  * @param send_content_length the length of the send_content data, or 0 if
512  * send_content is null
513  *
514  * @return zero if success, nonzero otherwise
515  */
517  const char *method, const char *url,
518  const char *headers,
519  RTSPMessageHeader *reply,
520  unsigned char **content_ptr,
521  const unsigned char *send_content,
522  int send_content_length);
523 
524 /**
525  * Send a command to the RTSP server and wait for the reply.
526  *
527  * @see rtsp_send_cmd_with_content
528  */
529 int ff_rtsp_send_cmd(AVFormatContext *s, const char *method,
530  const char *url, const char *headers,
531  RTSPMessageHeader *reply, unsigned char **content_ptr);
532 
533 /**
534  * Read a RTSP message from the server, or prepare to read data
535  * packets if we're reading data interleaved over the TCP/RTSP
536  * connection as well.
537  *
538  * @param s RTSP (de)muxer context
539  * @param reply pointer where the RTSP message header will be stored
540  * @param content_ptr pointer where the RTSP message body, if any, will
541  * be stored (length is in reply)
542  * @param return_on_interleaved_data whether the function may return if we
543  * encounter a data marker ('$'), which precedes data
544  * packets over interleaved TCP/RTSP connections. If this
545  * is set, this function will return 1 after encountering
546  * a '$'. If it is not set, the function will skip any
547  * data packets (if they are encountered), until a reply
548  * has been fully parsed. If no more data is available
549  * without parsing a reply, it will return an error.
550  * @param method the RTSP method this is a reply to. This affects how
551  * some response headers are acted upon. May be NULL.
552  *
553  * @return 1 if a data packets is ready to be received, -1 on error,
554  * and 0 on success.
555  */
557  unsigned char **content_ptr,
558  int return_on_interleaved_data, const char *method);
559 
560 /**
561  * Skip a RTP/TCP interleaved packet.
562  *
563  * @return 0 on success, < 0 on failure.
564  */
566 
567 /**
568  * Connect to the RTSP server and set up the individual media streams.
569  * This can be used for both muxers and demuxers.
570  *
571  * @param s RTSP (de)muxer context
572  *
573  * @return 0 on success, < 0 on error. Cleans up all allocations done
574  * within the function on error.
575  */
577 
578 /**
579  * Close and free all streams within the RTSP (de)muxer
580  *
581  * @param s RTSP (de)muxer context
582  */
584 
585 /**
586  * Close all connection handles within the RTSP (de)muxer
587  *
588  * @param s RTSP (de)muxer context
589  */
591 
592 /**
593  * Get the description of the stream and set up the RTSPStream child
594  * objects.
595  */
597 
598 /**
599  * Announce the stream to the server and set up the RTSPStream child
600  * objects for each media stream.
601  */
603 
604 /**
605  * Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in
606  * listen mode.
607  */
609 
610 /**
611  * Parse an SDP description of streams by populating an RTSPState struct
612  * within the AVFormatContext; also allocate the RTP streams and the
613  * pollfd array used for UDP streams.
614  */
615 int ff_sdp_parse(AVFormatContext *s, const char *content);
616 
617 /**
618  * Receive one RTP packet from an TCP interleaved RTSP stream.
619  */
621  uint8_t *buf, int buf_size);
622 
623 /**
624  * Send buffered packets over TCP.
625  */
627 
628 /**
629  * Receive one packet from the RTSPStreams set up in the AVFormatContext
630  * (which should contain a RTSPState struct as priv_data).
631  */
633 
634 /**
635  * Do the SETUP requests for each stream for the chosen
636  * lower transport mode.
637  * @return 0 on success, <0 on error, 1 if protocol is unavailable
638  */
639 int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port,
640  int lower_transport, const char *real_challenge);
641 
642 /**
643  * Undo the effect of ff_rtsp_make_setup_request, close the
644  * transport_priv and rtp_handle fields.
645  */
646 void ff_rtsp_undo_setup(AVFormatContext *s, int send_packets);
647 
648 /**
649  * Open RTSP transport context.
650  */
652 
653 extern const AVOption ff_rtsp_options[];
654 
655 #endif /* AVFORMAT_RTSP_H */
RTSPState::initial_timeout
int initial_timeout
Timeout to wait for incoming connections.
Definition: rtsp.h:401
RTSP_STATE_PAUSED
@ RTSP_STATE_PAUSED
initialized, but not receiving data
Definition: rtsp.h:205
RTSPState::initial_pause
int initial_pause
Do not begin to play the stream immediately.
Definition: rtsp.h:373
ff_rtsp_read_reply
int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply, unsigned char **content_ptr, int return_on_interleaved_data, const char *method)
Read a RTSP message from the server, or prepare to read data packets if we're reading data interleave...
RTSPState::last_cmd_time
int64_t last_cmd_time
timestamp of the last RTSP command that we sent to the RTSP server.
Definition: rtsp.h:263
opt.h
RTSPStream::transport_priv
void * transport_priv
RTP/RDT parse context if input, RTP AVFormatContext if output.
Definition: rtsp.h:446
ff_rtsp_send_cmd_with_content
int ff_rtsp_send_cmd_with_content(AVFormatContext *s, const char *method, const char *url, const char *headers, RTSPMessageHeader *reply, unsigned char **content_ptr, const unsigned char *send_content, int send_content_length)
Send a command to the RTSP server and wait for the reply.
RTSP_TRANSPORT_NB
@ RTSP_TRANSPORT_NB
Definition: rtsp.h:63
RTSPStream::rtp_handle
URLContext * rtp_handle
RTP stream handle (if UDP)
Definition: rtsp.h:445
RTSPTransportField::port_max
int port_max
Definition: rtsp.h:99
RTSP_SERVER_RTP
@ RTSP_SERVER_RTP
Standards-compliant RTP-server.
Definition: rtsp.h:214
RTSP_STATE_SEEKING
@ RTSP_STATE_SEEKING
initialized, requesting a seek
Definition: rtsp.h:206
RTSPMessageHeader::status_code
enum RTSPStatusCode status_code
response code from server
Definition: rtsp.h:133
ff_rtsp_send_cmd
int ff_rtsp_send_cmd(AVFormatContext *s, const char *method, const char *url, const char *headers, RTSPMessageHeader *reply, unsigned char **content_ptr)
Send a command to the RTSP server and wait for the reply.
RTSPState::control_transport
enum RTSPControlTransport control_transport
RTSP transport mode, such as plain or tunneled.
Definition: rtsp.h:339
RTSP_MODE_PLAIN
@ RTSP_MODE_PLAIN
Normal RTSP.
Definition: rtsp.h:71
RTSP_TRANSPORT_RTP
@ RTSP_TRANSPORT_RTP
Standards-compliant RTP.
Definition: rtsp.h:60
RTSPTransportField::source
char source[INET6_ADDRSTRLEN+1]
source IP address
Definition: rtsp.h:117
RTSPMessageHeader::range_end
int64_t range_end
Definition: rtsp.h:140
int64_t
long long int64_t
Definition: coverity.c:34
RTSPState::get_parameter_supported
int get_parameter_supported
Whether the server supports the GET_PARAMETER method.
Definition: rtsp.h:368
RTSPStream::nb_include_source_addrs
int nb_include_source_addrs
Number of source-specific multicast include source IP addresses (from SDP content)
Definition: rtsp.h:461
RTSPTransportField::server_port_min
int server_port_min
UDP unicast server port range; the ports to which we should connect to receive unicast UDP RTP/RTCP d...
Definition: rtsp.h:107
RTSPState::auth
char auth[128]
plaintext authorization line (username:password)
Definition: rtsp.h:281
RTSPStream::interleaved_min
int interleaved_min
interleave IDs; copies of RTSPTransportField->interleaved_min/max for the selected transport.
Definition: rtsp.h:453
RTSPState::recvbuf_pos
int recvbuf_pos
Definition: rtsp.h:330
AVOption
AVOption.
Definition: opt.h:346
RTSPTransportField::lower_transport
enum RTSPLowerTransport lower_transport
network layer transport protocol; e.g.
Definition: rtsp.h:123
RTSPState::rtp_port_min
int rtp_port_min
Minimum and maximum local UDP ports.
Definition: rtsp.h:396
RTSP_LOWER_TRANSPORT_CUSTOM
@ RTSP_LOWER_TRANSPORT_CUSTOM
Custom IO - not a public option for lower_transport_mask, but set in the SDP demuxer based on a flag.
Definition: rtsp.h:48
RTSPTransportField::interleaved_min
int interleaved_min
interleave ids, if TCP transport; each TCP/RTSP data packet starts with a '$', stream length and stre...
Definition: rtsp.h:95
RTSPTransportField::interleaved_max
int interleaved_max
Definition: rtsp.h:95
RTSPStream
Describe a single stream, as identified by a single m= line block in the SDP content.
Definition: rtsp.h:444
ff_rtsp_undo_setup
void ff_rtsp_undo_setup(AVFormatContext *s, int send_packets)
Undo the effect of ff_rtsp_make_setup_request, close the transport_priv and rtp_handle fields.
Definition: rtsp.c:759
ff_rtsp_close_streams
void ff_rtsp_close_streams(AVFormatContext *s)
Close and free all streams within the RTSP (de)muxer.
Definition: rtsp.c:791
ff_rtsp_send_cmd_async
int ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method, const char *url, const char *headers)
Send a command to the RTSP server without waiting for the reply.
RTSPState::real_challenge
char real_challenge[64]
the "RealChallenge1:" field from the server
Definition: rtsp.h:278
RTSPMessageHeader::nb_transports
int nb_transports
number of items in the 'transports' variable below
Definition: rtsp.h:136
RTSP_SERVER_REAL
@ RTSP_SERVER_REAL
Realmedia-style server.
Definition: rtsp.h:215
RTSPState::seek_timestamp
int64_t seek_timestamp
the seek value requested when calling av_seek_frame().
Definition: rtsp.h:247
os_support.h
sockaddr_storage
Definition: network.h:111
ff_sdp_parse
int ff_sdp_parse(AVFormatContext *s, const char *content)
Parse an SDP description of streams by populating an RTSPState struct within the AVFormatContext; als...
RTSPState::pkt_size
int pkt_size
Definition: rtsp.h:420
RTSPStream::feedback
int feedback
Enable sending RTCP feedback messages according to RFC 4585.
Definition: rtsp.h:479
RTSPState::asf_ctx
AVFormatContext * asf_ctx
The following are used for RTP/ASF streams.
Definition: rtsp.h:315
RTSPState::nb_rtsp_streams
int nb_rtsp_streams
number of items in the 'rtsp_streams' variable
Definition: rtsp.h:231
RTSPMessageHeader::content_length
int content_length
length of the data following this header
Definition: rtsp.h:131
RTSP_TRANSPORT_RDT
@ RTSP_TRANSPORT_RDT
Realmedia Data Transport.
Definition: rtsp.h:61
RTSP_STATE_STREAMING
@ RTSP_STATE_STREAMING
initialized and sending/receiving data
Definition: rtsp.h:204
ff_rtsp_setup_input_streams
int ff_rtsp_setup_input_streams(AVFormatContext *s, RTSPMessageHeader *reply)
Get the description of the stream and set up the RTSPStream child objects.
Definition: rtspdec.c:613
RTSPState::lower_transport_mask
int lower_transport_mask
A mask with all requested transport methods.
Definition: rtsp.h:352
RTSP_MODE_TUNNEL
@ RTSP_MODE_TUNNEL
RTSP over HTTP (tunneling)
Definition: rtsp.h:72
rtspcodes.h
RTSPStream::stream_index
int stream_index
corresponding stream index, if any.
Definition: rtsp.h:449
RTSPTransportField::destination
struct sockaddr_storage destination
destination IP address
Definition: rtsp.h:116
RTSP_LOWER_TRANSPORT_HTTPS
@ RTSP_LOWER_TRANSPORT_HTTPS
HTTPS tunneled.
Definition: rtsp.h:47
RTSPState::rtsp_hd_out
URLContext * rtsp_hd_out
Additional output handle, used when input and output are done separately, eg for HTTP tunneling.
Definition: rtsp.h:336
pkt
AVPacket * pkt
Definition: movenc.c:59
RTSPControlTransport
RTSPControlTransport
Transport mode for the RTSP data.
Definition: rtsp.h:70
RTSPState::reordering_queue_size
int reordering_queue_size
Size of RTP packet reordering queue.
Definition: rtsp.h:411
RTSPState::ts
struct MpegTSContext * ts
The following are used for parsing raw mpegts in udp.
Definition: rtsp.h:329
ff_rtsp_open_transport_ctx
int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
Open RTSP transport context.
Definition: rtsp.c:827
s
#define s(width, name)
Definition: cbs_vp9.c:198
RTSPState::nb_byes
int nb_byes
Definition: rtsp.h:344
RTSPState::p
struct pollfd * p
Polling array for udp.
Definition: rtsp.h:362
RTSPMessageHeader::location
char location[4096]
the "Location:" field.
Definition: rtsp.h:154
RTSPState::control_uri
char control_uri[MAX_URL_SIZE]
some MS RTSP streams contain a URL in the SDP that we need to use for all subsequent RTSP requests,...
Definition: rtsp.h:325
RTSPMessageHeader::transports
RTSPTransportField transports[RTSP_MAX_TRANSPORTS]
describes the complete "Transport:" line of the server in response to a SETUP RTSP command by the cli...
Definition: rtsp.h:144
RTSPMessageHeader::stream_id
char stream_id[64]
SAT>IP com.ses.streamID header.
Definition: rtsp.h:194
RTSPState::buffer_size
int buffer_size
Definition: rtsp.h:419
RTSPTransportField::ttl
int ttl
time-to-live value (required for multicast); the amount of HOPs that packets will be allowed to make ...
Definition: rtsp.h:111
ff_rtsp_fetch_packet
int ff_rtsp_fetch_packet(AVFormatContext *s, AVPacket *pkt)
Receive one packet from the RTSPStreams set up in the AVFormatContext (which should contain a RTSPSta...
RTSPStream::dynamic_handler
const RTPDynamicProtocolHandler * dynamic_handler
The following are used for dynamic protocols (rtpdec_*.c/rdt.c)
Definition: rtsp.h:472
RTSPMessageHeader::seq
int seq
sequence number
Definition: rtsp.h:146
RTSPState::rtp_muxer_flags
int rtp_muxer_flags
Option flags for the chained RTP muxer.
Definition: rtsp.h:378
ff_rtsp_setup_output_streams
int ff_rtsp_setup_output_streams(AVFormatContext *s, const char *addr)
Announce the stream to the server and set up the RTSPStream child objects for each media stream.
Definition: rtspenc.c:46
AVFormatContext
Format I/O context.
Definition: avformat.h:1255
internal.h
RTSPState::session_id
char session_id[512]
copy of RTSPMessageHeader->session_id, i.e.
Definition: rtsp.h:253
RTSPMessageHeader::reason
char reason[256]
The "reason" is meant to specify better the meaning of the error code returned.
Definition: rtsp.h:184
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
RTSPState::asf_pb_pos
uint64_t asf_pb_pos
cache for position of the asf demuxer, since we load a new data packet in the bytecontext for each in...
Definition: rtsp.h:319
RTSPState::rtsp_hd
URLContext * rtsp_hd
Definition: rtsp.h:228
RTSPServerType
RTSPServerType
Identify particular servers that require special handling, such as standards-incompliant "Transport:"...
Definition: rtsp.h:213
RTSPState::default_lang
char default_lang[4]
Definition: rtsp.h:418
RTSPMessageHeader::real_challenge
char real_challenge[64]
the "RealChallenge1:" field from the server
Definition: rtsp.h:157
RTSPState::real_setup
enum AVDiscard * real_setup
current stream setup.
Definition: rtsp.h:304
RTSP_MAX_TRANSPORTS
#define RTSP_MAX_TRANSPORTS
Definition: rtsp.h:77
RTSPState::state
enum RTSPClientState state
indicator of whether we are currently receiving data from the server.
Definition: rtsp.h:239
RTSPState::recvbuf
uint8_t * recvbuf
Reusable buffer for receiving packets.
Definition: rtsp.h:347
RTSPStream::sdp_port
int sdp_port
The following are used only in SDP, not RTSP.
Definition: rtsp.h:459
RTSPStream::exclude_source_addrs
struct RTSPSource ** exclude_source_addrs
Source-specific multicast exclude source IP addresses (from SDP content)
Definition: rtsp.h:464
rtpdec.h
ff_rtsp_options
const AVOption ff_rtsp_options[]
Definition: rtsp.c:85
HTTPAuthState
HTTP Authentication state structure.
Definition: httpauth.h:55
RTSPSource
Definition: rtsp.h:434
RTSPStream::dynamic_protocol_context
PayloadContext * dynamic_protocol_context
private data associated with the dynamic protocol
Definition: rtsp.h:475
ff_rtsp_tcp_read_packet
int ff_rtsp_tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, uint8_t *buf, int buf_size)
Receive one RTP packet from an TCP interleaved RTSP stream.
Definition: rtspdec.c:784
RTSPState::rtsp_flags
int rtsp_flags
Various option flags for the RTSP muxer/demuxer.
Definition: rtsp.h:386
ff_rtsp_close_connections
void ff_rtsp_close_connections(AVFormatContext *s)
Close all connection handles within the RTSP (de)muxer.
RTSPState
Private data for the RTSP demuxer.
Definition: rtsp.h:226
RTSPStream::include_source_addrs
struct RTSPSource ** include_source_addrs
Source-specific multicast include source IP addresses (from SDP content)
Definition: rtsp.h:462
RTSPState::lower_transport
enum RTSPLowerTransport lower_transport
the negotiated network layer transport protocol; e.g.
Definition: rtsp.h:270
RTSPMessageHeader::range_start
int64_t range_start
Time range of the streams that the server will stream.
Definition: rtsp.h:140
RTSPState::recvbuf_len
int recvbuf_len
Definition: rtsp.h:331
RTSPState::last_reply
char last_reply[2048]
The last reply of the server to a RTSP command.
Definition: rtsp.h:287
MpegTSContext
Definition: mpegts.c:131
RTSPTransportField::transport
enum RTSPTransport transport
data/packet transport protocol; e.g.
Definition: rtsp.h:120
RTSPState::rtsp_streams
struct RTSPStream ** rtsp_streams
streams in this session
Definition: rtsp.h:233
ff_rtsp_skip_packet
int ff_rtsp_skip_packet(AVFormatContext *s)
Skip a RTP/TCP interleaved packet.
RTSPState::seq
int seq
RTSP command sequence number.
Definition: rtsp.h:249
RTSPStream::crypto_params
char crypto_params[100]
Definition: rtsp.h:485
RTSPState::max_p
int max_p
Definition: rtsp.h:363
RTSPState::auth_state
HTTPAuthState auth_state
authentication state
Definition: rtsp.h:284
ff_rtsp_parse_line
void ff_rtsp_parse_line(AVFormatContext *s, RTSPMessageHeader *reply, const char *buf, RTSPState *rt, const char *method)
RTSPState::last_subscription
char last_subscription[1024]
the last value of the "SET_PARAMETER Subscribe:" RTSP command.
Definition: rtsp.h:309
RTSPStream::nb_exclude_source_addrs
int nb_exclude_source_addrs
Number of source-specific multicast exclude source IP addresses (from SDP content)
Definition: rtsp.h:463
RTSPState::timeout
int timeout
copy of RTSPMessageHeader->timeout, i.e.
Definition: rtsp.h:258
RTSPTransportField::client_port_max
int client_port_max
Definition: rtsp.h:103
RTSP_SERVER_SATIP
@ RTSP_SERVER_SATIP
SAT>IP server.
Definition: rtsp.h:217
httpauth.h
RTSPState::media_type_mask
int media_type_mask
Mask of all requested media types.
Definition: rtsp.h:391
URLContext
Definition: url.h:35
log.h
RTSPSource::addr
char addr[128]
Source-specific multicast include source IP address (from SDP content)
Definition: rtsp.h:435
RTSPMessageHeader::timeout
int timeout
The "timeout" comes as part of the server response to the "SETUP" command, in the "Session: <xyz>[;ti...
Definition: rtsp.h:174
RTSPState::need_subscription
int need_subscription
The following are used for Real stream selection.
Definition: rtsp.h:296
INET6_ADDRSTRLEN
#define INET6_ADDRSTRLEN
Definition: network.h:237
ff_rtsp_tcp_write_packet
int ff_rtsp_tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st)
Send buffered packets over TCP.
Definition: rtspenc.c:142
ff_rtsp_parse_streaming_commands
int ff_rtsp_parse_streaming_commands(AVFormatContext *s)
Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in listen mode.
Definition: rtspdec.c:484
RTSPStream::ssrc
uint32_t ssrc
SSRC for this stream, to allow identifying RTCP packets before the first RTP packet.
Definition: rtsp.h:482
RTSP_LOWER_TRANSPORT_TCP
@ RTSP_LOWER_TRANSPORT_TCP
TCP; interleaved in RTSP.
Definition: rtsp.h:41
RTSPStream::sdp_ttl
int sdp_ttl
IP Time-To-Live (from SDP content)
Definition: rtsp.h:465
RTSPTransportField::client_port_min
int client_port_min
UDP client ports; these should be the local ports of the UDP RTP (and RTCP) sockets over which we rec...
Definition: rtsp.h:103
RTSPLowerTransport
RTSPLowerTransport
Network layer over which RTP/etc packet data will be transported.
Definition: rtsp.h:39
RTSPState::rtp_port_max
int rtp_port_max
Definition: rtsp.h:396
RTSP_LOWER_TRANSPORT_UDP_MULTICAST
@ RTSP_LOWER_TRANSPORT_UDP_MULTICAST
UDP/multicast.
Definition: rtsp.h:42
RTSPState::cur_transport_priv
void * cur_transport_priv
RTSPStream->transport_priv of the last stream that we read a packet from.
Definition: rtsp.h:291
RTSPStream::sdp_payload_type
int sdp_payload_type
payload type
Definition: rtsp.h:466
avformat.h
network.h
RTSPStream::sdp_ip
struct sockaddr_storage sdp_ip
IP address (from SDP content)
Definition: rtsp.h:460
RTSP_LOWER_TRANSPORT_HTTP
@ RTSP_LOWER_TRANSPORT_HTTP
HTTP tunneled - not a proper transport mode as such, only for use via AVOptions.
Definition: rtsp.h:44
RTSPTransportField
This describes a single item in the "Transport:" line of one stream as negotiated by the SETUP RTSP c...
Definition: rtsp.h:90
RTSPState::transport
enum RTSPTransport transport
the negotiated data/packet transport protocol; e.g.
Definition: rtsp.h:266
MAX_URL_SIZE
#define MAX_URL_SIZE
Definition: internal.h:30
RTSPStream::control_url
char control_url[MAX_URL_SIZE]
url for this stream (from SDP)
Definition: rtsp.h:455
RTSPStream::interleaved_max
int interleaved_max
Definition: rtsp.h:453
RTSPState::localaddr
char * localaddr
Definition: rtsp.h:421
RTSPStatusCode
RTSPStatusCode
RTSP handling.
Definition: rtspcodes.h:31
headers
FFmpeg currently uses a custom build this text attempts to document some of its obscure features and options Makefile the full command issued by make and its output will be shown on the screen DBG Preprocess x86 external assembler files to a dbg asm file in the object which then gets compiled Helps in developing those assembler files DESTDIR Destination directory for the install useful to prepare packages or install FFmpeg in cross environments GEN Set to ‘1’ to generate the missing or mismatched references Makefile builds all the libraries and the executables fate Run the fate test note that you must have installed it fate list List all fate regression test targets install Install headers
Definition: build_system.txt:34
RTSP_SERVER_WMS
@ RTSP_SERVER_WMS
Windows Media server.
Definition: rtsp.h:216
RTSPMessageHeader
This describes the server response to each RTSP command.
Definition: rtsp.h:129
RTSP_TRANSPORT_RAW
@ RTSP_TRANSPORT_RAW
Raw data (over UDP)
Definition: rtsp.h:62
RTSPState::stimeout
int64_t stimeout
timeout of socket i/o operations.
Definition: rtsp.h:406
RTSPState::real_setup_cache
enum AVDiscard * real_setup_cache
stream setup during the last frame read.
Definition: rtsp.h:300
RTSP_STATE_IDLE
@ RTSP_STATE_IDLE
not initialized
Definition: rtsp.h:203
RTSPClientState
RTSPClientState
Client state, i.e.
Definition: rtsp.h:202
RTSP_LOWER_TRANSPORT_NB
@ RTSP_LOWER_TRANSPORT_NB
Definition: rtsp.h:43
AVPacket
This structure stores compressed data.
Definition: packet.h:499
RTSPState::server_type
enum RTSPServerType server_type
brand of server that we're talking to; e.g.
Definition: rtsp.h:275
RTSPMessageHeader::content_type
char content_type[64]
Content type header.
Definition: rtsp.h:189
RTSPTransportField::server_port_max
int server_port_max
Definition: rtsp.h:107
RTSPTransport
RTSPTransport
Packet profile of the data that we will be receiving.
Definition: rtsp.h:59
RTSPState::packets
uint64_t packets
The number of returned packets.
Definition: rtsp.h:357
RTSPTransportField::mode_record
int mode_record
transport set to record data
Definition: rtsp.h:114
RTSPState::accept_dynamic_rate
int accept_dynamic_rate
Whether the server accepts the x-Dynamic-Rate header.
Definition: rtsp.h:381
RTSPMessageHeader::session_id
char session_id[512]
the "Session:" field.
Definition: rtsp.h:150
RTSP_SERVER_NB
@ RTSP_SERVER_NB
Definition: rtsp.h:218
ff_rtsp_make_setup_request
int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port, int lower_transport, const char *real_challenge)
Do the SETUP requests for each stream for the chosen lower transport mode.
RTSPMessageHeader::server
char server[64]
the "Server: field, which can be used to identify some special-case servers that are not 100% standar...
Definition: rtsp.h:166
RTSPStream::crypto_suite
char crypto_suite[40]
Definition: rtsp.h:484
PayloadContext
RTP/JPEG specific private data.
Definition: rdt.c:84
AVDiscard
AVDiscard
Definition: defs.h:210
ff_rtsp_connect
int ff_rtsp_connect(AVFormatContext *s)
Connect to the RTSP server and set up the individual media streams.
RTSPTransportField::port_min
int port_min
UDP multicast port range; the ports to which we should connect to receive multicast UDP data.
Definition: rtsp.h:99
RTSPMessageHeader::notice
int notice
The "Notice" or "X-Notice" field value.
Definition: rtsp.h:179
RTSP_LOWER_TRANSPORT_UDP
@ RTSP_LOWER_TRANSPORT_UDP
UDP/unicast.
Definition: rtsp.h:40
RTPDynamicProtocolHandler
Definition: rtpdec.h:116
RTSPState::user_agent
char * user_agent
User-Agent string.
Definition: rtsp.h:416