FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
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
*/
37
enum
RTSPLowerTransport
{
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 */
41
RTSP_LOWER_TRANSPORT_NB
,
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
*/
56
enum
RTSPTransport
{
57
RTSP_TRANSPORT_RTP
,
/**< Standards-compliant RTP */
58
RTSP_TRANSPORT_RDT
,
/**< Realmedia Data Transport */
59
RTSP_TRANSPORT_RAW
,
/**< Raw data (over UDP) */
60
RTSP_TRANSPORT_NB
61
};
62
63
/**
64
* Transport mode for the RTSP data. This may be plain, or
65
* tunneled, which is done over HTTP.
66
*/
67
enum
RTSPControlTransport
{
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. */
92
int
interleaved_min
,
interleaved_max
;
93
94
/** UDP multicast port range; the ports to which we should connect to
95
* receive multicast UDP data. */
96
int
port_min
,
port_max
;
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. */
100
int
client_port_min
,
client_port_max
;
101
102
/** UDP unicast server port range; the ports to which we should connect
103
* to receive unicast UDP RTP/RTCP data. */
104
int
server_port_min
,
server_port_max
;
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 */
111
int
mode_record
;
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 */
117
enum
RTSPTransport
transport
;
118
119
/** network layer transport protocol; e.g. TCP or UDP uni-/multicast */
120
enum
RTSPLowerTransport
lower_transport
;
121
}
RTSPTransportField
;
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 */
128
int
content_length
;
129
130
enum
RTSPStatusCode
status_code
;
/**< response code from server */
131
132
/** number of items in the 'transports' variable below */
133
int
nb_transports
;
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 */
141
RTSPTransportField
transports
[
RTSP_MAX_TRANSPORTS
];
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];
187
}
RTSPMessageHeader
;
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
*/
194
enum
RTSPClientState
{
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
*/
205
enum
RTSPServerType
{
206
RTSP_SERVER_RTP
,
/**< Standards-compliant RTP-server */
207
RTSP_SERVER_REAL
,
/**< Realmedia-style server */
208
RTSP_SERVER_WMS
,
/**< Windows Media server */
209
RTSP_SERVER_NB
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 */
222
int
nb_rtsp_streams
;
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. */
230
enum
RTSPClientState
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 */
257
enum
RTSPTransport
transport
;
258
259
/** the negotiated network layer transport protocol; e.g. TCP or UDP
260
* uni-/multicast */
261
enum
RTSPLowerTransport
lower_transport
;
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 */
275
HTTPAuthState
auth_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 */
282
void
*
cur_transport_priv
;
283
284
/** The following are used for Real stream selection */
285
//@{
286
/** whether we need to send a "SET_PARAMETER Subscribe:" command */
287
int
need_subscription
;
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. */
291
enum
AVDiscard
*
real_setup_cache
;
292
293
/** current stream setup. This is a temporary buffer used to compare
294
* current setup to previous frame setup. */
295
enum
AVDiscard
*
real_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 */
306
AVFormatContext
*
asf_ctx
;
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
;
321
int
recvbuf_pos
;
322
int
recvbuf_len
;
323
//@}
324
325
/** Additional output handle, used when input and output are done
326
* separately, eg for HTTP tunneling. */
327
URLContext
*
rtsp_hd_out
;
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 */
338
uint8_t
*
recvbuf
;
339
340
/**
341
* A mask with all requested transport methods
342
*/
343
int
lower_transport_mask
;
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
*/
358
int
get_parameter_supported
;
359
360
/**
361
* Do not begin to play the stream immediately.
362
*/
363
int
initial_pause
;
364
365
/**
366
* Option flags for the chained RTP muxer.
367
*/
368
int
rtp_muxer_flags
;
369
370
/** Whether the server accepts the x-Dynamic-Rate header */
371
int
accept_dynamic_rate
;
372
373
/**
374
* Various option flags for the RTSP muxer/demuxer.
375
*/
376
int
rtsp_flags
;
377
378
/**
379
* Mask of all requested media types
380
*/
381
int
media_type_mask
;
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
*/
391
int
initial_timeout
;
392
393
/**
394
* timeout of socket i/o operations.
395
*/
396
int
stimeout
;
397
398
/**
399
* Size of RTP packet reordering queue.
400
*/
401
int
reordering_queue_size
;
402
403
/**
404
* User-Agent string
405
*/
406
char
*
user_agent
;
407
}
RTSPState
;
408
409
#define RTSP_FLAG_FILTER_SRC 0x1
/**< Filter incoming UDP packets -
410
receive packets only from the right
411
source address and port. */
412
#define RTSP_FLAG_LISTEN 0x2
/**< Wait for incoming connections. */
413
#define RTSP_FLAG_CUSTOM_IO 0x4
/**< Do all IO via the AVIOContext. */
414
#define RTSP_FLAG_RTCP_TO_SOURCE 0x8
/**< Send RTCP packets to the source
415
address of received packets. */
416
417
typedef
struct
RTSPSource
{
418
char
addr
[128];
/**< Source-specific multicast include source IP address (from SDP content) */
419
}
RTSPSource
;
420
421
/**
422
* Describe a single stream, as identified by a single m= line block in the
423
* SDP content. In the case of RDT, one RTSPStream can represent multiple
424
* AVStreams. In this case, each AVStream in this set has similar content
425
* (but different codec/bitrate).
426
*/
427
typedef
struct
RTSPStream
{
428
URLContext
*
rtp_handle
;
/**< RTP stream handle (if UDP) */
429
void
*
transport_priv
;
/**< RTP/RDT parse context if input, RTP AVFormatContext if output */
430
431
/** corresponding stream index, if any. -1 if none (MPEG2TS case) */
432
int
stream_index
;
433
434
/** interleave IDs; copies of RTSPTransportField->interleaved_min/max
435
* for the selected transport. Only used for TCP. */
436
int
interleaved_min
,
interleaved_max
;
437
438
char
control_url
[1024];
/**< url for this stream (from SDP) */
439
440
/** The following are used only in SDP, not RTSP */
441
//@{
442
int
sdp_port
;
/**< port (from SDP content) */
443
struct
sockaddr_storage
sdp_ip
;
/**< IP address (from SDP content) */
444
int
nb_include_source_addrs
;
/**< Number of source-specific multicast include source IP addresses (from SDP content) */
445
struct
RTSPSource
**
include_source_addrs
;
/**< Source-specific multicast include source IP addresses (from SDP content) */
446
int
nb_exclude_source_addrs
;
/**< Number of source-specific multicast exclude source IP addresses (from SDP content) */
447
struct
RTSPSource
**
exclude_source_addrs
;
/**< Source-specific multicast exclude source IP addresses (from SDP content) */
448
int
sdp_ttl
;
/**< IP Time-To-Live (from SDP content) */
449
int
sdp_payload_type
;
/**< payload type */
450
//@}
451
452
/** The following are used for dynamic protocols (rtpdec_*.c/rdt.c) */
453
//@{
454
/** handler structure */
455
RTPDynamicProtocolHandler
*
dynamic_handler
;
456
457
/** private data associated with the dynamic protocol */
458
PayloadContext
*
dynamic_protocol_context
;
459
//@}
460
461
/** Enable sending RTCP feedback messages according to RFC 4585 */
462
int
feedback
;
463
464
char
crypto_suite
[40];
465
char
crypto_params
[100];
466
}
RTSPStream
;
467
468
void
ff_rtsp_parse_line
(
RTSPMessageHeader
*reply,
const
char
*
buf
,
469
RTSPState
*rt,
const
char
*method);
470
471
/**
472
* Send a command to the RTSP server without waiting for the reply.
473
*
474
* @see rtsp_send_cmd_with_content_async
475
*/
476
int
ff_rtsp_send_cmd_async
(
AVFormatContext
*
s
,
const
char
*method,
477
const
char
*url,
const
char
*headers);
478
479
/**
480
* Send a command to the RTSP server and wait for the reply.
481
*
482
* @param s RTSP (de)muxer context
483
* @param method the method for the request
484
* @param url the target url for the request
485
* @param headers extra header lines to include in the request
486
* @param reply pointer where the RTSP message header will be stored
487
* @param content_ptr pointer where the RTSP message body, if any, will
488
* be stored (length is in reply)
489
* @param send_content if non-null, the data to send as request body content
490
* @param send_content_length the length of the send_content data, or 0 if
491
* send_content is null
492
*
493
* @return zero if success, nonzero otherwise
494
*/
495
int
ff_rtsp_send_cmd_with_content
(
AVFormatContext
*
s
,
496
const
char
*method,
const
char
*url,
497
const
char
*headers,
498
RTSPMessageHeader
*reply,
499
unsigned
char
**content_ptr,
500
const
unsigned
char
*send_content,
501
int
send_content_length);
502
503
/**
504
* Send a command to the RTSP server and wait for the reply.
505
*
506
* @see rtsp_send_cmd_with_content
507
*/
508
int
ff_rtsp_send_cmd
(
AVFormatContext
*
s
,
const
char
*method,
509
const
char
*url,
const
char
*headers,
510
RTSPMessageHeader
*reply,
unsigned
char
**content_ptr);
511
512
/**
513
* Read a RTSP message from the server, or prepare to read data
514
* packets if we're reading data interleaved over the TCP/RTSP
515
* connection as well.
516
*
517
* @param s RTSP (de)muxer context
518
* @param reply pointer where the RTSP message header will be stored
519
* @param content_ptr pointer where the RTSP message body, if any, will
520
* be stored (length is in reply)
521
* @param return_on_interleaved_data whether the function may return if we
522
* encounter a data marker ('$'), which precedes data
523
* packets over interleaved TCP/RTSP connections. If this
524
* is set, this function will return 1 after encountering
525
* a '$'. If it is not set, the function will skip any
526
* data packets (if they are encountered), until a reply
527
* has been fully parsed. If no more data is available
528
* without parsing a reply, it will return an error.
529
* @param method the RTSP method this is a reply to. This affects how
530
* some response headers are acted upon. May be NULL.
531
*
532
* @return 1 if a data packets is ready to be received, -1 on error,
533
* and 0 on success.
534
*/
535
int
ff_rtsp_read_reply
(
AVFormatContext
*
s
,
RTSPMessageHeader
*reply,
536
unsigned
char
**content_ptr,
537
int
return_on_interleaved_data,
const
char
*method);
538
539
/**
540
* Skip a RTP/TCP interleaved packet.
541
*/
542
void
ff_rtsp_skip_packet
(
AVFormatContext
*
s
);
543
544
/**
545
* Connect to the RTSP server and set up the individual media streams.
546
* This can be used for both muxers and demuxers.
547
*
548
* @param s RTSP (de)muxer context
549
*
550
* @return 0 on success, < 0 on error. Cleans up all allocations done
551
* within the function on error.
552
*/
553
int
ff_rtsp_connect
(
AVFormatContext
*
s
);
554
555
/**
556
* Close and free all streams within the RTSP (de)muxer
557
*
558
* @param s RTSP (de)muxer context
559
*/
560
void
ff_rtsp_close_streams
(
AVFormatContext
*
s
);
561
562
/**
563
* Close all connection handles within the RTSP (de)muxer
564
*
565
* @param s RTSP (de)muxer context
566
*/
567
void
ff_rtsp_close_connections
(
AVFormatContext
*
s
);
568
569
/**
570
* Get the description of the stream and set up the RTSPStream child
571
* objects.
572
*/
573
int
ff_rtsp_setup_input_streams
(
AVFormatContext
*
s
,
RTSPMessageHeader
*reply);
574
575
/**
576
* Announce the stream to the server and set up the RTSPStream child
577
* objects for each media stream.
578
*/
579
int
ff_rtsp_setup_output_streams
(
AVFormatContext
*
s
,
const
char
*
addr
);
580
581
/**
582
* Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in
583
* listen mode.
584
*/
585
int
ff_rtsp_parse_streaming_commands
(
AVFormatContext
*
s
);
586
587
/**
588
* Parse an SDP description of streams by populating an RTSPState struct
589
* within the AVFormatContext; also allocate the RTP streams and the
590
* pollfd array used for UDP streams.
591
*/
592
int
ff_sdp_parse
(
AVFormatContext
*
s
,
const
char
*content);
593
594
/**
595
* Receive one RTP packet from an TCP interleaved RTSP stream.
596
*/
597
int
ff_rtsp_tcp_read_packet
(
AVFormatContext
*
s
,
RTSPStream
**prtsp_st,
598
uint8_t
*
buf
,
int
buf_size);
599
600
/**
601
* Send buffered packets over TCP.
602
*/
603
int
ff_rtsp_tcp_write_packet
(
AVFormatContext
*
s
,
RTSPStream
*rtsp_st);
604
605
/**
606
* Receive one packet from the RTSPStreams set up in the AVFormatContext
607
* (which should contain a RTSPState struct as priv_data).
608
*/
609
int
ff_rtsp_fetch_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
);
610
611
/**
612
* Do the SETUP requests for each stream for the chosen
613
* lower transport mode.
614
* @return 0 on success, <0 on error, 1 if protocol is unavailable
615
*/
616
int
ff_rtsp_make_setup_request
(
AVFormatContext
*
s
,
const
char
*host,
int
port,
617
int
lower_transport,
const
char
*real_challenge);
618
619
/**
620
* Undo the effect of ff_rtsp_make_setup_request, close the
621
* transport_priv and rtp_handle fields.
622
*/
623
void
ff_rtsp_undo_setup
(
AVFormatContext
*
s
,
int
send_packets);
624
625
/**
626
* Open RTSP transport context.
627
*/
628
int
ff_rtsp_open_transport_ctx
(
AVFormatContext
*
s
,
RTSPStream
*rtsp_st);
629
630
extern
const
AVOption
ff_rtsp_options
[];
631
632
#endif
/* AVFORMAT_RTSP_H */
Generated on Sun Mar 23 2014 23:50:13 for FFmpeg by
1.8.2