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 
32 #include "libavutil/log.h"
33 #include "libavutil/opt.h"
34 
35 /**
36  * Network layer over which RTP/etc packet data will be transported.
37  */
39  RTSP_LOWER_TRANSPORT_UDP = 0, /**< UDP/unicast */
40  RTSP_LOWER_TRANSPORT_TCP = 1, /**< TCP; interleaved in RTSP */
41  RTSP_LOWER_TRANSPORT_UDP_MULTICAST = 2, /**< UDP/multicast */
43  RTSP_LOWER_TRANSPORT_HTTP = 8, /**< HTTP tunneled - not a proper
44  transport mode as such,
45  only for use via AVOptions */
46  RTSP_LOWER_TRANSPORT_HTTPS, /**< HTTPS tunneled */
47  RTSP_LOWER_TRANSPORT_CUSTOM = 16, /**< Custom IO - not a public
48  option for lower_transport_mask,
49  but set in the SDP demuxer based
50  on a flag. */
51 };
52 
53 /**
54  * Packet profile of the data that we will be receiving. Real servers
55  * commonly send RDT (although they can sometimes send RTP as well),
56  * whereas most others will send RTP.
57  */
59  RTSP_TRANSPORT_RTP, /**< Standards-compliant RTP */
60  RTSP_TRANSPORT_RDT, /**< Realmedia Data Transport */
61  RTSP_TRANSPORT_RAW, /**< Raw data (over UDP) */
63 };
64 
65 /**
66  * Transport mode for the RTSP data. This may be plain, or
67  * tunneled, which is done over HTTP.
68  */
70  RTSP_MODE_PLAIN, /**< Normal RTSP */
71  RTSP_MODE_TUNNEL /**< RTSP over HTTP (tunneling) */
72 };
73 
74 #define RTSP_DEFAULT_PORT 554
75 #define RTSPS_DEFAULT_PORT 322
76 #define RTSP_MAX_TRANSPORTS 8
77 #define RTSP_TCP_MAX_PACKET_SIZE 1472
78 #define RTSP_DEFAULT_NB_AUDIO_CHANNELS 1
79 #define RTSP_DEFAULT_AUDIO_SAMPLERATE 44100
80 #define RTSP_RTP_PORT_MIN 5000
81 #define RTSP_RTP_PORT_MAX 65000
82 #define SDP_MAX_SIZE 16384
83 
84 /**
85  * This describes a single item in the "Transport:" line of one stream as
86  * negotiated by the SETUP RTSP command. Multiple transports are comma-
87  * separated ("Transport: x-read-rdt/tcp;interleaved=0-1,rtp/avp/udp;
88  * client_port=1000-1001;server_port=1800-1801") and described in separate
89  * RTSPTransportFields.
90  */
91 typedef struct RTSPTransportField {
92  /** interleave ids, if TCP transport; each TCP/RTSP data packet starts
93  * with a '$', stream length and stream ID. If the stream ID is within
94  * the range of this interleaved_min-max, then the packet belongs to
95  * this stream. */
97 
98  /** UDP multicast port range; the ports to which we should connect to
99  * receive multicast UDP data. */
101 
102  /** UDP client ports; these should be the local ports of the UDP RTP
103  * (and RTCP) sockets over which we receive RTP/RTCP data. */
105 
106  /** UDP unicast server port range; the ports to which we should connect
107  * to receive unicast UDP RTP/RTCP data. */
109 
110  /** time-to-live value (required for multicast); the amount of HOPs that
111  * packets will be allowed to make before being discarded. */
112  int ttl;
113 
114  /** transport set to record data */
116 
117  struct sockaddr_storage destination; /**< destination IP address */
118  char source[INET6_ADDRSTRLEN + 1]; /**< source IP address */
119 
120  /** data/packet transport protocol; e.g. RTP or RDT */
122 
123  /** network layer transport protocol; e.g. TCP or UDP uni-/multicast */
126 
127 /**
128  * This describes the server response to each RTSP command.
129  */
130 typedef struct RTSPMessageHeader {
131  /** length of the data following this header */
133 
134  enum RTSPStatusCode status_code; /**< response code from server */
135 
136  /** number of items in the 'transports' variable below */
138 
139  /** Time range of the streams that the server will stream. In
140  * AV_TIME_BASE unit, AV_NOPTS_VALUE if not used */
141  int64_t range_start, range_end;
142 
143  /** describes the complete "Transport:" line of the server in response
144  * to a SETUP RTSP command by the client */
146 
147  int seq; /**< sequence number */
148 
149  /** the "Session:" field. This value is initially set by the server and
150  * should be re-transmitted by the client in every RTSP command. */
151  char session_id[512];
152 
153  /** the "Location:" field. This value is used to handle redirection.
154  */
155  char location[4096];
156 
157  /** the "RealChallenge1:" field from the server */
158  char real_challenge[64];
159 
160  /** the "Server: field, which can be used to identify some special-case
161  * servers that are not 100% standards-compliant. We use this to identify
162  * Windows Media Server, which has a value "WMServer/v.e.r.sion", where
163  * version is a sequence of digits (e.g. 9.0.0.3372). Helix/Real servers
164  * use something like "Helix [..] Server Version v.e.r.sion (platform)
165  * (RealServer compatible)" or "RealServer Version v.e.r.sion (platform)",
166  * where platform is the output of $uname -msr | sed 's/ /-/g'. */
167  char server[64];
168 
169  /** The "timeout" comes as part of the server response to the "SETUP"
170  * command, in the "Session: <xyz>[;timeout=<value>]" line. It is the
171  * time, in seconds, that the server will go without traffic over the
172  * RTSP/TCP connection before it closes the connection. To prevent
173  * this, sent dummy requests (e.g. OPTIONS) with intervals smaller
174  * than this value. */
175  int timeout;
176 
177  /** The "Notice" or "X-Notice" field value. See
178  * http://tools.ietf.org/html/draft-stiemerling-rtsp-announce-00
179  * for a complete list of supported values. */
180  int notice;
181 
182  /** The "reason" is meant to specify better the meaning of the error code
183  * returned
184  */
185  char reason[256];
186 
187  /**
188  * Content type header
189  */
190  char content_type[64];
191 
192  /**
193  * SAT>IP com.ses.streamID header
194  */
195  char stream_id[64];
197 
198 /**
199  * Client state, i.e. whether we are currently receiving data (PLAYING) or
200  * setup-but-not-receiving (PAUSED). State can be changed in applications
201  * by calling av_read_play/pause().
202  */
204  RTSP_STATE_IDLE, /**< not initialized */
205  RTSP_STATE_STREAMING, /**< initialized and sending/receiving data */
206  RTSP_STATE_PAUSED, /**< initialized, but not receiving data */
207  RTSP_STATE_SEEKING, /**< initialized, requesting a seek */
208 };
209 
210 /**
211  * Identify particular servers that require special handling, such as
212  * standards-incompliant "Transport:" lines in the SETUP request.
213  */
215  RTSP_SERVER_RTP, /**< Standards-compliant RTP-server */
216  RTSP_SERVER_REAL, /**< Realmedia-style server */
217  RTSP_SERVER_WMS, /**< Windows Media server */
218  RTSP_SERVER_SATIP,/**< SAT>IP server */
220 };
221 
222 /**
223  * Private data for the RTSP demuxer.
224  *
225  * @todo Use AVIOContext instead of URLContext
226  */
227 typedef struct RTSPState {
228  const AVClass *class; /**< Class for private options. */
229  URLContext *rtsp_hd; /* RTSP TCP connection handle */
230 
231  /** number of items in the 'rtsp_streams' variable */
233 
234  struct RTSPStream **rtsp_streams; /**< streams in this session */
235 
236  /** indicator of whether we are currently receiving data from the
237  * server. Basically this isn't more than a simple cache of the
238  * last PLAY/PAUSE command sent to the server, to make sure we don't
239  * send 2x the same unexpectedly or commands in the wrong state. */
241 
242  /** the seek value requested when calling av_seek_frame(). This value
243  * is subsequently used as part of the "Range" parameter when emitting
244  * the RTSP PLAY command. If we are currently playing, this command is
245  * called instantly. If we are currently paused, this command is called
246  * whenever we resume playback. Either way, the value is only used once,
247  * see rtsp_read_play() and rtsp_read_seek(). */
248  int64_t seek_timestamp;
249 
250  int seq; /**< RTSP command sequence number */
251 
252  /** copy of RTSPMessageHeader->session_id, i.e. the server-provided session
253  * identifier that the client should re-transmit in each RTSP command */
254  char session_id[512];
255 
256  /** copy of RTSPMessageHeader->timeout, i.e. the time (in seconds) that
257  * the server will go without traffic on the RTSP/TCP line before it
258  * closes the connection. */
259  int timeout;
260 
261  /** timestamp of the last RTSP command that we sent to the RTSP server.
262  * This is used to calculate when to send dummy commands to keep the
263  * connection alive, in conjunction with timeout. */
264  int64_t last_cmd_time;
265 
266  /** the negotiated data/packet transport protocol; e.g. RTP or RDT */
268 
269  /** the negotiated network layer transport protocol; e.g. TCP or UDP
270  * uni-/multicast */
272 
273  /** brand of server that we're talking to; e.g. WMS, REAL or other.
274  * Detected based on the value of RTSPMessageHeader->server or the presence
275  * of RTSPMessageHeader->real_challenge */
276  enum RTSPServerType server_type;
277 
278  /** the "RealChallenge1:" field from the server */
279  char real_challenge[64];
280 
281  /** plaintext authorization line (username:password) */
282  char auth[128];
283 
284  /** authentication state */
286 
287  /** The last reply of the server to a RTSP command */
288  char last_reply[2048]; /* XXX: allocate ? */
289 
290  /** RTSPStream->transport_priv of the last stream that we read a
291  * packet from */
293 
294  /** The following are used for Real stream selection */
295  //@{
296  /** whether we need to send a "SET_PARAMETER Subscribe:" command */
298 
299  /** stream setup during the last frame read. This is used to detect if
300  * we need to subscribe or unsubscribe to any new streams. */
302 
303  /** current stream setup. This is a temporary buffer used to compare
304  * current setup to previous frame setup. */
306 
307  /** the last value of the "SET_PARAMETER Subscribe:" RTSP command.
308  * this is used to send the same "Unsubscribe:" if stream setup changed,
309  * before sending a new "Subscribe:" command. */
310  char last_subscription[1024];
311  //@}
312 
313  /** The following are used for RTP/ASF streams */
314  //@{
315  /** ASF demuxer context for the embedded ASF stream from WMS servers */
317 
318  /** cache for position of the asf demuxer, since we load a new
319  * data packet in the bytecontext for each incoming RTSP packet. */
320  uint64_t asf_pb_pos;
321  //@}
322 
323  /** some MS RTSP streams contain a URL in the SDP that we need to use
324  * for all subsequent RTSP requests, rather than the input URI; in
325  * other cases, this is a copy of AVFormatContext->filename. */
326  char control_uri[MAX_URL_SIZE];
327 
328  /** The following are used for parsing raw mpegts in udp */
329  //@{
330  struct MpegTSContext *ts;
333  //@}
334 
335  /** Additional output handle, used when input and output are done
336  * separately, eg for HTTP tunneling. */
338 
339  /** RTSP transport mode, such as plain or tunneled. */
340  enum RTSPControlTransport control_transport;
341 
342  /* Number of RTCP BYE packets the RTSP session has received.
343  * An EOF is propagated back if nb_byes == nb_streams.
344  * This is reset after a seek. */
345  int nb_byes;
346 
347  /** Reusable buffer for receiving packets */
349 
350  /**
351  * A mask with all requested transport methods
352  */
354 
355  /**
356  * The number of returned packets
357  */
358  uint64_t packets;
359 
360  /**
361  * Polling array for udp
362  */
363  struct pollfd *p;
364  int max_p;
365 
366  /**
367  * Whether the server supports the GET_PARAMETER method.
368  */
370 
371  /**
372  * Do not begin to play the stream immediately.
373  */
375 
376  /**
377  * Option flags for the chained RTP muxer.
378  */
380 
381  /** Whether the server accepts the x-Dynamic-Rate header */
383 
384  /**
385  * Various option flags for the RTSP muxer/demuxer.
386  */
388 
389  /**
390  * Mask of all requested media types
391  */
393 
394  /**
395  * Minimum and maximum local UDP ports.
396  */
397  int rtp_port_min, rtp_port_max;
398 
399  /**
400  * Timeout to wait for incoming connections.
401  */
403 
404  /**
405  * timeout of socket i/o operations.
406  */
407  int stimeout;
408 
409  /**
410  * Size of RTP packet reordering queue.
411  */
413 
414  /**
415  * User-Agent string
416  */
417  char *user_agent;
418 
419  char default_lang[4];
421  int pkt_size;
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;
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 */
448  /** corresponding stream index, if any. -1 if none (MPEG2TS case) */
449  int stream_index;
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) */
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  //@}
469  /** The following are used for dynamic protocols (rtpdec_*.c/rdt.c) */
470  //@{
471  /** handler structure */
472  const RTPDynamicProtocolHandler *dynamic_handler;
473 
474  /** private data associated with the dynamic protocol */
475  PayloadContext *dynamic_protocol_context;
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;
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  */
564 
565 /**
566  * Connect to the RTSP server and set up the individual media streams.
567  * This can be used for both muxers and demuxers.
568  *
569  * @param s RTSP (de)muxer context
570  *
571  * @return 0 on success, < 0 on error. Cleans up all allocations done
572  * within the function on error.
573  */
575 
576 /**
577  * Close and free all streams within the RTSP (de)muxer
578  *
579  * @param s RTSP (de)muxer context
580  */
582 
583 /**
584  * Close all connection handles within the RTSP (de)muxer
585  *
586  * @param s RTSP (de)muxer context
587  */
589 
590 /**
591  * Get the description of the stream and set up the RTSPStream child
592  * objects.
593  */
595 
596 /**
597  * Announce the stream to the server and set up the RTSPStream child
598  * objects for each media stream.
599  */
601 
602 /**
603  * Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in
604  * listen mode.
605  */
607 
608 /**
609  * Parse an SDP description of streams by populating an RTSPState struct
610  * within the AVFormatContext; also allocate the RTP streams and the
611  * pollfd array used for UDP streams.
612  */
613 int ff_sdp_parse(AVFormatContext *s, const char *content);
614 
615 /**
616  * Receive one RTP packet from an TCP interleaved RTSP stream.
617  */
619  uint8_t *buf, int buf_size);
620 
621 /**
622  * Send buffered packets over TCP.
623  */
625 
626 /**
627  * Receive one packet from the RTSPStreams set up in the AVFormatContext
628  * (which should contain a RTSPState struct as priv_data).
629  */
631 
632 /**
633  * Do the SETUP requests for each stream for the chosen
634  * lower transport mode.
635  * @return 0 on success, <0 on error, 1 if protocol is unavailable
636  */
637 int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port,
638  int lower_transport, const char *real_challenge);
639 
640 /**
641  * Undo the effect of ff_rtsp_make_setup_request, close the
642  * transport_priv and rtp_handle fields.
643  */
644 void ff_rtsp_undo_setup(AVFormatContext *s, int send_packets);
645 
646 /**
647  * Open RTSP transport context.
648  */
650 
651 extern const AVOption ff_rtsp_options[];
652 
653 #endif /* AVFORMAT_RTSP_H */
int interleaved_min
interleave ids, if TCP transport; each TCP/RTSP data packet starts with a &#39;$&#39;, stream length and stre...
Definition: rtsp.h:96
void ff_rtsp_skip_packet(AVFormatContext *s)
Skip a RTP/TCP interleaved packet.
int rtp_port_min
Minimum and maximum local UDP ports.
Definition: rtsp.h:397
Realmedia Data Transport.
Definition: rtsp.h:60
RTSPLowerTransport
Network layer over which RTP/etc packet data will be transported.
Definition: rtsp.h:38
int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
Open RTSP transport context.
Definition: rtsp.c:828
AVOption.
Definition: opt.h:248
HTTPS tunneled.
Definition: rtsp.h:46
char source[INET6_ADDRSTRLEN+1]
source IP address
Definition: rtsp.h:118
Windows Media server.
Definition: rtsp.h:217
struct pollfd * p
Polling array for udp.
Definition: rtsp.h:363
RTP/JPEG specific private data.
Definition: rdt.c:83
enum AVDiscard * real_setup
current stream setup.
Definition: rtsp.h:305
char * user_agent
User-Agent string.
Definition: rtsp.h:417
enum AVDiscard * real_setup_cache
stream setup during the last frame read.
Definition: rtsp.h:301
int mode_record
transport set to record data
Definition: rtsp.h:115
UDP/unicast.
Definition: rtsp.h:39
int seq
sequence number
Definition: rtsp.h:147
initialized and sending/receiving data
Definition: rtsp.h:205
AVPacket * pkt
Definition: movenc.c:59
RTSPClientState
Client state, i.e.
Definition: rtsp.h:203
HTTP Authentication state structure.
Definition: httpauth.h:55
int64_t seek_timestamp
the seek value requested when calling av_seek_frame().
Definition: rtsp.h:248
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.
enum RTSPLowerTransport lower_transport
network layer transport protocol; e.g.
Definition: rtsp.h:124
This describes the server response to each RTSP command.
Definition: rtsp.h:130
RTSPTransport
Packet profile of the data that we will be receiving.
Definition: rtsp.h:58
Format I/O context.
Definition: avformat.h:1247
#define MAX_URL_SIZE
Definition: internal.h:30
int ff_rtsp_connect(AVFormatContext *s)
Connect to the RTSP server and set up the individual media streams.
Standards-compliant RTP-server.
Definition: rtsp.h:215
int reordering_queue_size
Size of RTP packet reordering queue.
Definition: rtsp.h:412
int recvbuf_len
Definition: rtsp.h:332
int get_parameter_supported
Whether the server supports the GET_PARAMETER method.
Definition: rtsp.h:369
Standards-compliant RTP.
Definition: rtsp.h:59
uint8_t
#define RTSP_MAX_TRANSPORTS
Definition: rtsp.h:76
int ttl
time-to-live value (required for multicast); the amount of HOPs that packets will be allowed to make ...
Definition: rtsp.h:112
AVOptions.
int initial_timeout
Timeout to wait for incoming connections.
Definition: rtsp.h:402
int rtp_muxer_flags
Option flags for the chained RTP muxer.
Definition: rtsp.h:379
int accept_dynamic_rate
Whether the server accepts the x-Dynamic-Rate header.
Definition: rtsp.h:382
URLContext * rtsp_hd_out
Additional output handle, used when input and output are done separately, eg for HTTP tunneling...
Definition: rtsp.h:337
Describe a single stream, as identified by a single m= line block in the SDP content.
Definition: rtsp.h:447
Custom IO - not a public option for lower_transport_mask, but set in the SDP demuxer based on a flag...
Definition: rtsp.h:47
RTSPServerType
Identify particular servers that require special handling, such as standards-incompliant "Transport:"...
Definition: rtsp.h:214
int ff_rtsp_parse_streaming_commands(AVFormatContext *s)
Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in listen mode.
Definition: rtspdec.c:474
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.
Normal RTSP.
Definition: rtsp.h:70
static struct @321 state
int nb_transports
number of items in the &#39;transports&#39; variable below
Definition: rtsp.h:137
void ff_rtsp_parse_line(AVFormatContext *s, RTSPMessageHeader *reply, const char *buf, RTSPState *rt, const char *method)
int notice
The "Notice" or "X-Notice" field value.
Definition: rtsp.h:180
int ff_sdp_parse(AVFormatContext *s, const char *content)
Parse an SDP description of streams by populating an RTSPState struct within the AVFormatContext; als...
Private data for the RTSP demuxer.
Definition: rtsp.h:227
int64_t last_cmd_time
timestamp of the last RTSP command that we sent to the RTSP server.
Definition: rtsp.h:264
const AVOption ff_rtsp_options[]
Definition: rtsp.c:80
int timeout
copy of RTSPMessageHeader->timeout, i.e.
Definition: rtsp.h:259
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:760
URLContext * rtsp_hd
Definition: rtsp.h:229
struct RTSPStream ** rtsp_streams
streams in this session
Definition: rtsp.h:234
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:320
int seq
RTSP command sequence number.
Definition: rtsp.h:250
uint8_t * recvbuf
Reusable buffer for receiving packets.
Definition: rtsp.h:348
AVFormatContext * asf_ctx
The following are used for RTP/ASF streams.
Definition: rtsp.h:316
int recvbuf_pos
Definition: rtsp.h:331
int nb_rtsp_streams
number of items in the &#39;rtsp_streams&#39; variable
Definition: rtsp.h:232
void * cur_transport_priv
RTSPStream->transport_priv of the last stream that we read a packet from.
Definition: rtsp.h:292
int content_length
length of the data following this header
Definition: rtsp.h:132
int timeout
The "timeout" comes as part of the server response to the "SETUP" command, in the "Session: <xyz>[;ti...
Definition: rtsp.h:175
HTTP tunneled - not a proper transport mode as such, only for use via AVOptions.
Definition: rtsp.h:43
This describes a single item in the "Transport:" line of one stream as negotiated by the SETUP RTSP c...
Definition: rtsp.h:91
RTSP over HTTP (tunneling)
Definition: rtsp.h:71
#define s(width, name)
Definition: cbs_vp9.c:257
int ff_rtsp_tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st)
Send buffered packets over TCP.
Definition: rtspenc.c:141
Raw data (over UDP)
Definition: rtsp.h:61
struct MpegTSContext * ts
The following are used for parsing raw mpegts in udp.
Definition: rtsp.h:330
int nb_byes
Definition: rtsp.h:345
RTSPControlTransport
Transport mode for the RTSP data.
Definition: rtsp.h:69
char addr[128]
Source-specific multicast include source IP address (from SDP content)
Definition: rtsp.h:438
int media_type_mask
Mask of all requested media types.
Definition: rtsp.h:392
int server_port_max
Definition: rtsp.h:108
Definition: url.h:38
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:45
int rtsp_flags
Various option flags for the RTSP muxer/demuxer.
Definition: rtsp.h:387
int client_port_max
Definition: rtsp.h:104
Describe the class of an AVClass context structure.
Definition: log.h:67
not initialized
Definition: rtsp.h:204
enum RTSPTransport transport
data/packet transport protocol; e.g.
Definition: rtsp.h:121
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:774
int max_p
Definition: rtsp.h:364
int buffer_size
Definition: rtsp.h:420
int interleaved_max
Definition: rtsp.h:96
RTSPStatusCode
RTSP handling.
Definition: rtspcodes.h:31
int64_t range_start
Time range of the streams that the server will stream.
Definition: rtsp.h:141
#define INET6_ADDRSTRLEN
Definition: network.h:237
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...
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.
Main libavformat public API header.
initialized, requesting a seek
Definition: rtsp.h:207
int need_subscription
The following are used for Real stream selection.
Definition: rtsp.h:297
SAT>IP server.
Definition: rtsp.h:218
initialized, but not receiving data
Definition: rtsp.h:206
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&#39;re reading data interleave...
void ff_rtsp_close_streams(AVFormatContext *s)
Close and free all streams within the RTSP (de)muxer.
Definition: rtsp.c:792
int stimeout
timeout of socket i/o operations.
Definition: rtsp.h:407
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.
TCP; interleaved in RTSP.
Definition: rtsp.h:40
HTTPAuthState auth_state
authentication state
Definition: rtsp.h:285
uint64_t packets
The number of returned packets.
Definition: rtsp.h:358
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:603
AVDiscard
Definition: avcodec.h:227
Realmedia-style server.
Definition: rtsp.h:216
int lower_transport_mask
A mask with all requested transport methods.
Definition: rtsp.h:353
int pkt_size
Definition: rtsp.h:421
struct sockaddr_storage destination
destination IP address
Definition: rtsp.h:117
This structure stores compressed data.
Definition: packet.h:346
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:108
void ff_rtsp_close_connections(AVFormatContext *s)
Close all connection handles within the RTSP (de)muxer.
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:1
int port_min
UDP multicast port range; the ports to which we should connect to receive multicast UDP data...
Definition: rtsp.h:100
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:104
int initial_pause
Do not begin to play the stream immediately.
Definition: rtsp.h:374