FFmpeg
|
#include <stdint.h>
#include "avformat.h"
#include "rtspcodes.h"
#include "rtpdec.h"
#include "network.h"
#include "httpauth.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
Go to the source code of this file.
Data Structures | |
struct | RTSPTransportField |
This describes a single item in the "Transport:" line of one stream as negotiated by the SETUP RTSP command. More... | |
struct | RTSPMessageHeader |
This describes the server response to each RTSP command. More... | |
struct | RTSPState |
Private data for the RTSP demuxer. More... | |
struct | RTSPStream |
Describe a single stream, as identified by a single m= line block in the SDP content. More... | |
Macros | |
#define | RTSP_DEFAULT_PORT 554 |
#define | RTSP_MAX_TRANSPORTS 8 |
#define | RTSP_TCP_MAX_PACKET_SIZE 1472 |
#define | RTSP_DEFAULT_NB_AUDIO_CHANNELS 1 |
#define | RTSP_DEFAULT_AUDIO_SAMPLERATE 44100 |
#define | RTSP_RTP_PORT_MIN 5000 |
#define | RTSP_RTP_PORT_MAX 65000 |
#define | RTSP_FLAG_FILTER_SRC 0x1 |
Filter incoming UDP packets - receive packets only from the right source address and port. | |
#define | RTSP_FLAG_LISTEN 0x2 |
Wait for incoming connections. | |
#define | RTSP_FLAG_CUSTOM_IO 0x4 |
Do all IO via the AVIOContext. | |
Enumerations | |
enum | RTSPLowerTransport { RTSP_LOWER_TRANSPORT_UDP = 0, RTSP_LOWER_TRANSPORT_TCP = 1, RTSP_LOWER_TRANSPORT_UDP_MULTICAST = 2, RTSP_LOWER_TRANSPORT_NB, RTSP_LOWER_TRANSPORT_HTTP = 8, RTSP_LOWER_TRANSPORT_CUSTOM = 16 } |
Network layer over which RTP/etc packet data will be transported. More... | |
enum | RTSPTransport { RTSP_TRANSPORT_RTP, RTSP_TRANSPORT_RDT, RTSP_TRANSPORT_RAW, RTSP_TRANSPORT_NB } |
Packet profile of the data that we will be receiving. More... | |
enum | RTSPControlTransport { RTSP_MODE_PLAIN, RTSP_MODE_TUNNEL } |
Transport mode for the RTSP data. More... | |
enum | RTSPClientState { RTSP_STATE_IDLE, RTSP_STATE_STREAMING, RTSP_STATE_PAUSED, RTSP_STATE_SEEKING } |
Client state, i.e. More... | |
enum | RTSPServerType { RTSP_SERVER_RTP, RTSP_SERVER_REAL, RTSP_SERVER_WMS, RTSP_SERVER_NB } |
Identify particular servers that require special handling, such as standards-incompliant "Transport:" lines in the SETUP request. More... | |
Functions | |
void | ff_rtsp_parse_line (RTSPMessageHeader *reply, const char *buf, RTSPState *rt, const char *method) |
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. | |
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. | |
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. | |
int | ff_rtsp_read_reply (AVFormatContext *s, RTSPMessageHeader *reply, unsigned char **content_ptr, int return_on_interleaved_data, const char *method) |
Read a RTSP message from the server, or prepare to read data packets if we're reading data interleaved over the TCP/RTSP connection as well. | |
void | ff_rtsp_skip_packet (AVFormatContext *s) |
Skip a RTP/TCP interleaved packet. | |
int | ff_rtsp_connect (AVFormatContext *s) |
Connect to the RTSP server and set up the individual media streams. | |
void | ff_rtsp_close_streams (AVFormatContext *s) |
Close and free all streams within the RTSP (de)muxer. | |
void | ff_rtsp_close_connections (AVFormatContext *s) |
Close all connection handles within the RTSP (de)muxer. | |
int | ff_rtsp_setup_input_streams (AVFormatContext *s, RTSPMessageHeader *reply) |
Get the description of the stream and set up the RTSPStream child objects. | |
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. | |
int | ff_rtsp_parse_streaming_commands (AVFormatContext *s) |
Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in listen mode. | |
int | ff_sdp_parse (AVFormatContext *s, const char *content) |
Parse an SDP description of streams by populating an RTSPState struct within the AVFormatContext; also allocate the RTP streams and the pollfd array used for UDP streams. | |
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. | |
int | ff_rtsp_fetch_packet (AVFormatContext *s, AVPacket *pkt) |
Receive one packet from the RTSPStreams set up in the AVFormatContext (which should contain a RTSPState struct as priv_data). | |
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. | |
void | ff_rtsp_undo_setup (AVFormatContext *s) |
Undo the effect of ff_rtsp_make_setup_request, close the transport_priv and rtp_handle fields. | |
int | ff_rtsp_open_transport_ctx (AVFormatContext *s, RTSPStream *rtsp_st) |
Open RTSP transport context. | |
Variables | |
const AVOption | ff_rtsp_options [] |
#define RTSP_DEFAULT_PORT 554 |
Definition at line 72 of file rtsp.h.
Referenced by rtsp_listen().
#define RTSP_TCP_MAX_PACKET_SIZE 1472 |
Definition at line 74 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx(), http_prepare_data(), rtp_new_av_stream(), and tcp_write_packet().
#define RTSP_FLAG_FILTER_SRC 0x1 |
#define RTSP_FLAG_LISTEN 0x2 |
Wait for incoming connections.
Definition at line 407 of file rtsp.h.
Referenced by rtsp_read_close(), rtsp_read_header(), and rtsp_read_packet().
#define RTSP_FLAG_CUSTOM_IO 0x4 |
Do all IO via the AVIOContext.
enum RTSPLowerTransport |
Network layer over which RTP/etc packet data will be transported.
enum RTSPTransport |
Packet profile of the data that we will be receiving.
Real servers commonly send RDT (although they can sometimes send RTP as well), whereas most others will send RTP.
enum RTSPControlTransport |
enum RTSPClientState |
Client state, i.e.
whether we are currently receiving data (PLAYING) or setup-but-not-receiving (PAUSED). State can be changed in applications by calling av_read_play/pause().
enum RTSPServerType |
void ff_rtsp_parse_line | ( | RTSPMessageHeader * | reply, |
const char * | buf, | ||
RTSPState * | rt, | ||
const char * | method | ||
) |
Referenced by rtsp_parse_request(), and rtsp_read_request().
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.
Referenced by rtsp_read_close(), rtsp_read_packet(), and rtsp_write_close().
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.
s | RTSP (de)muxer context |
method | the method for the request |
url | the target url for the request |
headers | extra header lines to include in the request |
reply | pointer where the RTSP message header will be stored |
content_ptr | pointer where the RTSP message body, if any, will be stored (length is in reply) |
send_content | if non-null, the data to send as request body content |
send_content_length | the length of the send_content data, or 0 if send_content is null |
Referenced by ff_rtsp_setup_output_streams().
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.
Referenced by ff_rtsp_setup_input_streams(), rtsp_read_packet(), rtsp_read_pause(), rtsp_read_play(), and rtsp_write_record().
int ff_rtsp_read_reply | ( | AVFormatContext * | s, |
RTSPMessageHeader * | reply, | ||
unsigned char ** | content_ptr, | ||
int | return_on_interleaved_data, | ||
const char * | method | ||
) |
Read a RTSP message from the server, or prepare to read data packets if we're reading data interleaved over the TCP/RTSP connection as well.
s | RTSP (de)muxer context |
reply | pointer where the RTSP message header will be stored |
content_ptr | pointer where the RTSP message body, if any, will be stored (length is in reply) |
return_on_interleaved_data | whether the function may return if we encounter a data marker ('$'), which precedes data packets over interleaved TCP/RTSP connections. If this is set, this function will return 1 after encountering a '$'. If it is not set, the function will skip any data packets (if they are encountered), until a reply has been fully parsed. If no more data is available without parsing a reply, it will return an error. |
method | the RTSP method this is a reply to. This affects how some response headers are acted upon. May be NULL. |
Referenced by ff_rtsp_tcp_read_packet(), and rtsp_write_packet().
void ff_rtsp_skip_packet | ( | AVFormatContext * | s | ) |
Skip a RTP/TCP interleaved packet.
Referenced by rtsp_write_packet().
int ff_rtsp_connect | ( | AVFormatContext * | s | ) |
Connect to the RTSP server and set up the individual media streams.
This can be used for both muxers and demuxers.
s | RTSP (de)muxer context |
Referenced by rtsp_read_header(), and rtsp_write_header().
void ff_rtsp_close_streams | ( | AVFormatContext * | s | ) |
Close and free all streams within the RTSP (de)muxer.
s | RTSP (de)muxer context |
Definition at line 601 of file rtsp.c.
Referenced by rtsp_read_close(), rtsp_read_header(), rtsp_write_close(), and rtsp_write_header().
void ff_rtsp_close_connections | ( | AVFormatContext * | s | ) |
Close all connection handles within the RTSP (de)muxer.
s | RTSP (de)muxer context |
Referenced by rtsp_read_close(), rtsp_read_header(), rtsp_write_close(), and rtsp_write_header().
int ff_rtsp_setup_input_streams | ( | AVFormatContext * | s, |
RTSPMessageHeader * | reply | ||
) |
Get the description of the stream and set up the RTSPStream child objects.
The Require: attribute is needed for proper streaming from Realmedia servers.
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.
int ff_rtsp_parse_streaming_commands | ( | AVFormatContext * | s | ) |
int ff_sdp_parse | ( | AVFormatContext * | s, |
const char * | content | ||
) |
Parse an SDP description of streams by populating an RTSPState struct within the AVFormatContext; also allocate the RTP streams and the pollfd array used for UDP streams.
Referenced by ff_rtsp_setup_input_streams(), and rtsp_read_announce().
int ff_rtsp_tcp_read_packet | ( | AVFormatContext * | s, |
RTSPStream ** | prtsp_st, | ||
uint8_t * | buf, | ||
int | buf_size | ||
) |
int ff_rtsp_fetch_packet | ( | AVFormatContext * | s, |
AVPacket * | pkt | ||
) |
Receive one packet from the RTSPStreams set up in the AVFormatContext (which should contain a RTSPState struct as priv_data).
Referenced by rtsp_read_packet().
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.
Referenced by resetup_tcp().
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 at line 567 of file rtsp.c.
Referenced by ff_rtsp_close_streams(), and resetup_tcp().
int ff_rtsp_open_transport_ctx | ( | AVFormatContext * | s, |
RTSPStream * | rtsp_st | ||
) |
Open RTSP transport context.
Definition at line 627 of file rtsp.c.
Referenced by rtsp_read_setup().