X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frtsp.h;h=b9357c1b6f94dd76622b61b297241e7724d30b71;hb=b8b21dee0f0b4bcc1888067c497d6e838859d2cd;hp=45b003279772fecd3a28cc8de5e0cda07467c163;hpb=f011fcd67edf27d2b1f6fcdff0b4c19da36176e9;p=ffmpeg diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index 45b00327977..b9357c1b6f9 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; /** @@ -186,7 +200,7 @@ enum RTSPClientState { }; /** - * Identifies particular servers that require special handling, such as + * Identify particular servers that require special handling, such as * standards-incompliant "Transport:" lines in the SETUP request. */ enum RTSPServerType { @@ -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; @@ -359,14 +380,40 @@ typedef struct RTSPState { * Mask of all requested media types */ int media_type_mask; + + /** + * 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; } 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; /** - * Describes a single stream, as identified by a single m= line block in the + * Describe a single stream, as identified by a single m= line block in the * SDP content. In the case of RDT, one RTSPStream can represent multiple * AVStreams. In this case, each AVStream in this set has similar content * (but different codec/bitrate). @@ -388,11 +435,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; @@ -400,14 +451,18 @@ 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); -extern int rtsp_rtp_port_min; -extern int rtsp_rtp_port_max; - /** * Send a command to the RTSP server without waiting for the reply. * @@ -518,6 +573,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 @@ -531,6 +592,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). @@ -549,7 +615,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[];