FFmpeg
4.0
|
#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 | RTSPSource |
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 | RTSPS_DEFAULT_PORT 322 |
#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. More... | |
#define | RTSP_FLAG_LISTEN 0x2 |
Wait for incoming connections. More... | |
#define | RTSP_FLAG_CUSTOM_IO 0x4 |
Do all IO via the AVIOContext. More... | |
#define | RTSP_FLAG_RTCP_TO_SOURCE 0x8 |
Send RTCP packets to the source address of received packets. More... | |
#define | RTSP_FLAG_PREFER_TCP 0x10 |
Try RTP via TCP first if possible. More... | |
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 (AVFormatContext *s, 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. More... | |
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. More... | |
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. More... | |
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. More... | |
void | ff_rtsp_skip_packet (AVFormatContext *s) |
Skip a RTP/TCP interleaved packet. More... | |
int | ff_rtsp_connect (AVFormatContext *s) |
Connect to the RTSP server and set up the individual media streams. More... | |
void | ff_rtsp_close_streams (AVFormatContext *s) |
Close and free all streams within the RTSP (de)muxer. More... | |
void | ff_rtsp_close_connections (AVFormatContext *s) |
Close all connection handles within the RTSP (de)muxer. More... | |
int | ff_rtsp_setup_input_streams (AVFormatContext *s, RTSPMessageHeader *reply) |
Get the description of the stream and set up the RTSPStream child objects. More... | |
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. More... | |
int | ff_rtsp_parse_streaming_commands (AVFormatContext *s) |
Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in listen mode. More... | |
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. More... | |
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. More... | |
int | ff_rtsp_tcp_write_packet (AVFormatContext *s, RTSPStream *rtsp_st) |
Send buffered packets over TCP. More... | |
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). More... | |
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. More... | |
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. More... | |
int | ff_rtsp_open_transport_ctx (AVFormatContext *s, RTSPStream *rtsp_st) |
Open RTSP transport context. More... | |
Variables | |
const AVOption | ff_rtsp_options [] |
#define RTSP_DEFAULT_PORT 554 |
Definition at line 72 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx(), and rtsp_listen().
#define RTSPS_DEFAULT_PORT 322 |
Definition at line 73 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx(), and rtsp_listen().
#define RTSP_MAX_TRANSPORTS 8 |
Definition at line 74 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx().
#define RTSP_TCP_MAX_PACKET_SIZE 1472 |
Definition at line 75 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx(), and ff_rtsp_tcp_write_packet().
#define RTSP_DEFAULT_NB_AUDIO_CHANNELS 1 |
Definition at line 76 of file rtsp.h.
Referenced by get_sockaddr().
#define RTSP_DEFAULT_AUDIO_SAMPLERATE 44100 |
Definition at line 77 of file rtsp.h.
Referenced by get_sockaddr().
#define RTSP_FLAG_FILTER_SRC 0x1 |
Filter incoming UDP packets - receive packets only from the right source address and port.
Definition at line 414 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx().
#define RTSP_FLAG_LISTEN 0x2 |
Wait for incoming connections.
Definition at line 419 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx(), rtsp_read_close(), rtsp_read_header(), and rtsp_read_packet().
#define RTSP_FLAG_CUSTOM_IO 0x4 |
Do all IO via the AVIOContext.
Definition at line 420 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx().
#define RTSP_FLAG_RTCP_TO_SOURCE 0x8 |
Send RTCP packets to the source address of received packets.
Definition at line 421 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx().
#define RTSP_FLAG_PREFER_TCP 0x10 |
Try RTP via TCP first if possible.
Definition at line 424 of file rtsp.h.
Referenced by ff_rtsp_open_transport_ctx().
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.
Enumerator | |
---|---|
RTSP_TRANSPORT_RTP | Standards-compliant RTP. |
RTSP_TRANSPORT_RDT | Realmedia Data Transport. |
RTSP_TRANSPORT_RAW | Raw data (over UDP) |
RTSP_TRANSPORT_NB |
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 | ( | AVFormatContext * | s, |
RTSPMessageHeader * | reply, | ||
const char * | buf, | ||
RTSPState * | rt, | ||
const char * | method | ||
) |
Referenced by ff_rtsp_open_transport_ctx(), 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 ff_rtsp_open_transport_ctx(), 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_open_transport_ctx(), and 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_open_transport_ctx(), 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_open_transport_ctx(), ff_rtsp_tcp_read_packet(), and rtsp_write_packet().
void ff_rtsp_skip_packet | ( | AVFormatContext * | s | ) |
Skip a RTP/TCP interleaved packet.
Referenced by ff_rtsp_open_transport_ctx(), and 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 ff_rtsp_open_transport_ctx(), 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 765 of file rtsp.c.
Referenced by ff_rtsp_open_transport_ctx(), 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 ff_rtsp_open_transport_ctx(), 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.
Definition at line 593 of file rtspdec.c.
Referenced by ff_rtsp_open_transport_ctx().
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 at line 46 of file rtspenc.c.
Referenced by ff_rtsp_open_transport_ctx().
int ff_rtsp_parse_streaming_commands | ( | AVFormatContext * | s | ) |
Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in listen mode.
Definition at line 465 of file rtspdec.c.
Referenced by ff_rtsp_open_transport_ctx().
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_open_transport_ctx(), ff_rtsp_setup_input_streams(), get_sockaddr(), and rtsp_read_announce().
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 at line 750 of file rtspdec.c.
Referenced by ff_rtsp_open_transport_ctx().
int ff_rtsp_tcp_write_packet | ( | AVFormatContext * | s, |
RTSPStream * | rtsp_st | ||
) |
Send buffered packets over TCP.
Definition at line 142 of file rtspenc.c.
Referenced by ff_rtsp_undo_setup(), and rtsp_write_packet().
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 ff_rtsp_open_transport_ctx(), and 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 ff_rtsp_open_transport_ctx(), and resetup_tcp().
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 at line 731 of file rtsp.c.
Referenced by ff_rtsp_close_streams(), ff_rtsp_open_transport_ctx(), resetup_tcp(), and rtsp_write_close().
int ff_rtsp_open_transport_ctx | ( | AVFormatContext * | s, |
RTSPStream * | rtsp_st | ||
) |
Open RTSP transport context.
Definition at line 801 of file rtsp.c.
Referenced by ff_rtsp_open_transport_ctx(), and rtsp_read_setup().