X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frtsp.h;h=0226dac0f1d48e8f25934abe56e95c88058b79fc;hb=79fdbfdb3e50f3f906903e027714ee04c1a00e89;hp=6872a51a2491a69ced4903c8563ec0af7da8f785;hpb=dbb06b8c0d7020d4a95ef8b2831aa58ec00145c7;p=ffmpeg diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index 6872a51a249..0226dac0f1d 100644 --- a/libavformat/rtsp.h +++ b/libavformat/rtsp.h @@ -42,6 +42,10 @@ enum RTSPLowerTransport { RTSP_LOWER_TRANSPORT_HTTP = 8, /**< HTTP tunneled - not a proper transport mode as such, only for use via AVOptions */ + RTSP_LOWER_TRANSPORT_CUSTOM = 16, /**< Custom IO - not a public + option for lower_transport_mask, + but set in the SDP demuxer based + on a flag. */ }; /** @@ -52,6 +56,7 @@ enum RTSPLowerTransport { enum RTSPTransport { RTSP_TRANSPORT_RTP, /**< Standards-compliant RTP */ RTSP_TRANSPORT_RDT, /**< Realmedia Data Transport */ + RTSP_TRANSPORT_RAW, /**< Raw data (over UDP) */ RTSP_TRANSPORT_NB }; @@ -65,6 +70,7 @@ enum RTSPControlTransport { }; #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 @@ -102,6 +108,9 @@ typedef struct RTSPTransportField { * packets will be allowed to make before being discarded. */ int ttl; + /** transport set to record data */ + int mode_record; + struct sockaddr_storage destination; /**< destination IP address */ char source[INET6_ADDRSTRLEN + 1]; /**< source IP address */ @@ -171,6 +180,11 @@ typedef struct RTSPMessageHeader { * returned */ char reason[256]; + + /** + * Content type header + */ + char content_type[64]; } RTSPMessageHeader; /** @@ -302,6 +316,13 @@ typedef struct RTSPState { * other cases, this is a copy of AVFormatContext->filename. */ char control_uri[1024]; + /** The following are used for parsing raw mpegts in udp */ + //@{ + struct MpegTSContext *ts; + int recvbuf_pos; + int recvbuf_len; + //@} + /** Additional output handle, used when input and output are done * separately, eg for HTTP tunneling. */ URLContext *rtsp_hd_out; @@ -364,11 +385,34 @@ typedef struct RTSPState { * Minimum and maximum local UDP ports. */ int rtp_port_min, rtp_port_max; + + /** + * Timeout to wait for incoming connections. + */ + int initial_timeout; + + /** + * Size of RTP packet reordering queue. + */ + int reordering_queue_size; + + char default_lang[4]; + int buffer_size; + + const URLProtocol **protocols; } RTSPState; #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. */ +#define RTSP_FLAG_RTCP_TO_SOURCE 0x8 /**< Send RTCP packets to the source + address of received packets. */ + +typedef struct RTSPSource { + char addr[128]; /**< Source-specific multicast include source IP address (from SDP content) */ +} RTSPSource; /** * Describe a single stream, as identified by a single m= line block in the @@ -393,11 +437,15 @@ typedef struct RTSPStream { //@{ int sdp_port; /**< port (from SDP content) */ struct sockaddr_storage sdp_ip; /**< IP address (from SDP content) */ + int nb_include_source_addrs; /**< Number of source-specific multicast include source IP addresses (from SDP content) */ + struct RTSPSource **include_source_addrs; /**< Source-specific multicast include source IP addresses (from SDP content) */ + int nb_exclude_source_addrs; /**< Number of source-specific multicast exclude source IP addresses (from SDP content) */ + struct RTSPSource **exclude_source_addrs; /**< Source-specific multicast exclude source IP addresses (from SDP content) */ int sdp_ttl; /**< IP Time-To-Live (from SDP content) */ int sdp_payload_type; /**< payload type */ //@} - /** The following are used for dynamic protocols (rtp_*.c/rdt.c) */ + /** The following are used for dynamic protocols (rtpdec_*.c/rdt.c) */ //@{ /** handler structure */ RTPDynamicProtocolHandler *dynamic_handler; @@ -405,9 +453,16 @@ typedef struct RTSPStream { /** private data associated with the dynamic protocol */ PayloadContext *dynamic_protocol_context; //@} + + /** Enable sending RTCP feedback messages according to RFC 4585 */ + int feedback; + + char crypto_suite[40]; + char crypto_params[100]; } RTSPStream; -void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf, +void ff_rtsp_parse_line(AVFormatContext *s, + RTSPMessageHeader *reply, const char *buf, RTSPState *rt, const char *method); /** @@ -520,6 +575,12 @@ int ff_rtsp_setup_input_streams(AVFormatContext *s, RTSPMessageHeader *reply); */ int ff_rtsp_setup_output_streams(AVFormatContext *s, const char *addr); +/** + * Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in + * listen mode. + */ +int ff_rtsp_parse_streaming_commands(AVFormatContext *s); + /** * Parse an SDP description of streams by populating an RTSPState struct * within the AVFormatContext; also allocate the RTP streams and the @@ -533,6 +594,11 @@ int ff_sdp_parse(AVFormatContext *s, const char *content); int ff_rtsp_tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, uint8_t *buf, int buf_size); +/** + * Send buffered packets over TCP. + */ +int ff_rtsp_tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st); + /** * Receive one packet from the RTSPStreams set up in the AVFormatContext * (which should contain a RTSPState struct as priv_data). @@ -551,7 +617,12 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port, * Undo the effect of ff_rtsp_make_setup_request, close the * transport_priv and rtp_handle fields. */ -void ff_rtsp_undo_setup(AVFormatContext *s); +void ff_rtsp_undo_setup(AVFormatContext *s, int send_packets); + +/** + * Open RTSP transport context. + */ +int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st); extern const AVOption ff_rtsp_options[];