From 0fff7f039c148a91dde41772d2dc26dd0efb5f89 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Thu, 11 Jul 2013 23:05:53 +0200 Subject: Supply a User-Agent header when opening rtsp streams. Some rtsp servers like the IP Cam IcyBox IB-CAM2002 need it. Fixes ticket #2761. Reported, analyzed and tested by trac user imavra. --- libavformat/rtsp.c | 3 +++ libavformat/rtsp.h | 5 +++++ libavformat/rtspdec.c | 2 ++ libavformat/version.h | 2 +- 4 files changed, 11 insertions(+), 1 deletion(-) (limited to 'libavformat') diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 6310d79c28..5421bb2a6f 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -62,6 +62,8 @@ #define DEC AV_OPT_FLAG_DECODING_PARAM #define ENC AV_OPT_FLAG_ENCODING_PARAM +#define DEFAULT_USER_AGENT "Lavf/" AV_STRINGIFY(LIBAVFORMAT_VERSION) + #define RTSP_FLAG_OPTS(name, longname) \ { name, longname, OFFSET(rtsp_flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtsp_flags" }, \ { "filter_src", "Only receive packets from the negotiated peer IP", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_FILTER_SRC}, 0, 0, DEC, "rtsp_flags" }, \ @@ -91,6 +93,7 @@ const AVOption ff_rtsp_options[] = { { "timeout", "Maximum timeout (in seconds) to wait for incoming connections. -1 is infinite. Implies flag listen", OFFSET(initial_timeout), AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX, DEC }, { "stimeout", "timeout (in micro seconds) of socket i/o operations.", OFFSET(stimeout), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC }, RTSP_REORDERING_OPTS(), + { "user-agent", "override User-Agent header", OFFSET(user_agent), AV_OPT_TYPE_STRING, {.str = DEFAULT_USER_AGENT}, 0, 0, DEC }, { NULL }, }; diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index 4af3507d73..9e6e23785a 100644 --- a/libavformat/rtsp.h +++ b/libavformat/rtsp.h @@ -399,6 +399,11 @@ typedef struct RTSPState { * Size of RTP packet reordering queue. */ int reordering_queue_size; + + /** + * User-Agent string + */ + char *user_agent; } RTSPState; #define RTSP_FLAG_FILTER_SRC 0x1 /**< Filter incoming UDP packets - diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index da571a8ee8..99a21cdd14 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -574,6 +574,8 @@ int ff_rtsp_setup_input_streams(AVFormatContext *s, RTSPMessageHeader *reply) /* describe the stream */ snprintf(cmd, sizeof(cmd), "Accept: application/sdp\r\n"); + av_strlcatf(cmd, sizeof(cmd), + "User-Agent: %s\r\n", rt->user_agent); if (rt->server_type == RTSP_SERVER_REAL) { /** * The Require: attribute is needed for proper streaming from diff --git a/libavformat/version.h b/libavformat/version.h index 55e5f4c137..ed1c1966ec 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -31,7 +31,7 @@ #define LIBAVFORMAT_VERSION_MAJOR 55 #define LIBAVFORMAT_VERSION_MINOR 12 -#define LIBAVFORMAT_VERSION_MICRO 101 +#define LIBAVFORMAT_VERSION_MICRO 102 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ -- cgit v1.2.3