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