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