mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Add "prefer_tcp" flag to "rtsp_flags"
If set, and if TCP is available as RTSP RTP transport, then TCP will be tried first as RTP transport. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
206167a295
commit
bc764d786f
@ -733,6 +733,8 @@ The following values are accepted:
|
|||||||
Accept packets only from negotiated peer address and port.
|
Accept packets only from negotiated peer address and port.
|
||||||
@item listen
|
@item listen
|
||||||
Act as a server, listening for an incoming connection.
|
Act as a server, listening for an incoming connection.
|
||||||
|
@item prefer_tcp
|
||||||
|
Try TCP for RTP transport first, if TCP is available as RTSP RTP transport.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
Default value is @samp{none}.
|
Default value is @samp{none}.
|
||||||
|
@ -86,6 +86,7 @@ const AVOption ff_rtsp_options[] = {
|
|||||||
{ "http", "HTTP tunneling", 0, AV_OPT_TYPE_CONST, {.i64 = (1 << RTSP_LOWER_TRANSPORT_HTTP)}, 0, 0, DEC, "rtsp_transport" },
|
{ "http", "HTTP tunneling", 0, AV_OPT_TYPE_CONST, {.i64 = (1 << RTSP_LOWER_TRANSPORT_HTTP)}, 0, 0, DEC, "rtsp_transport" },
|
||||||
RTSP_FLAG_OPTS("rtsp_flags", "set RTSP flags"),
|
RTSP_FLAG_OPTS("rtsp_flags", "set RTSP flags"),
|
||||||
{ "listen", "wait for incoming connections", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_LISTEN}, 0, 0, DEC, "rtsp_flags" },
|
{ "listen", "wait for incoming connections", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_LISTEN}, 0, 0, DEC, "rtsp_flags" },
|
||||||
|
{ "prefer_tcp", "try RTP via TCP first, if available", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_PREFER_TCP}, 0, 0, DEC|ENC, "rtsp_flags" },
|
||||||
RTSP_MEDIATYPE_OPTS("allowed_media_types", "set media types to accept from the server"),
|
RTSP_MEDIATYPE_OPTS("allowed_media_types", "set media types to accept from the server"),
|
||||||
{ "min_port", "set minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC },
|
{ "min_port", "set minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC },
|
||||||
{ "max_port", "set maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC },
|
{ "max_port", "set maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC },
|
||||||
@ -1766,6 +1767,10 @@ redirect:
|
|||||||
int lower_transport = ff_log2_tab[lower_transport_mask &
|
int lower_transport = ff_log2_tab[lower_transport_mask &
|
||||||
~(lower_transport_mask - 1)];
|
~(lower_transport_mask - 1)];
|
||||||
|
|
||||||
|
if ((lower_transport_mask & (1 << RTSP_LOWER_TRANSPORT_TCP))
|
||||||
|
&& (rt->rtsp_flags & RTSP_FLAG_PREFER_TCP))
|
||||||
|
lower_transport = RTSP_LOWER_TRANSPORT_TCP;
|
||||||
|
|
||||||
err = ff_rtsp_make_setup_request(s, host, port, lower_transport,
|
err = ff_rtsp_make_setup_request(s, host, port, lower_transport,
|
||||||
rt->server_type == RTSP_SERVER_REAL ?
|
rt->server_type == RTSP_SERVER_REAL ?
|
||||||
real_challenge : NULL);
|
real_challenge : NULL);
|
||||||
|
@ -413,6 +413,7 @@ typedef struct RTSPState {
|
|||||||
#define RTSP_FLAG_CUSTOM_IO 0x4 /**< Do all IO via the AVIOContext. */
|
#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
|
#define RTSP_FLAG_RTCP_TO_SOURCE 0x8 /**< Send RTCP packets to the source
|
||||||
address of received packets. */
|
address of received packets. */
|
||||||
|
#define RTSP_FLAG_PREFER_TCP 0x10 /**< Try RTP via TCP first if possible. */
|
||||||
|
|
||||||
typedef struct RTSPSource {
|
typedef struct RTSPSource {
|
||||||
char addr[128]; /**< Source-specific multicast include source IP address (from SDP content) */
|
char addr[128]; /**< Source-specific multicast include source IP address (from SDP content) */
|
||||||
|
Loading…
Reference in New Issue
Block a user