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.
This commit is contained in:
parent
43d36599fe
commit
0fff7f039c
@ -62,6 +62,8 @@
|
|||||||
#define DEC AV_OPT_FLAG_DECODING_PARAM
|
#define DEC AV_OPT_FLAG_DECODING_PARAM
|
||||||
#define ENC AV_OPT_FLAG_ENCODING_PARAM
|
#define ENC AV_OPT_FLAG_ENCODING_PARAM
|
||||||
|
|
||||||
|
#define DEFAULT_USER_AGENT "Lavf/" AV_STRINGIFY(LIBAVFORMAT_VERSION)
|
||||||
|
|
||||||
#define RTSP_FLAG_OPTS(name, longname) \
|
#define RTSP_FLAG_OPTS(name, longname) \
|
||||||
{ name, longname, OFFSET(rtsp_flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtsp_flags" }, \
|
{ 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" }, \
|
{ "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 },
|
{ "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 },
|
{ "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(),
|
RTSP_REORDERING_OPTS(),
|
||||||
|
{ "user-agent", "override User-Agent header", OFFSET(user_agent), AV_OPT_TYPE_STRING, {.str = DEFAULT_USER_AGENT}, 0, 0, DEC },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -399,6 +399,11 @@ typedef struct RTSPState {
|
|||||||
* Size of RTP packet reordering queue.
|
* Size of RTP packet reordering queue.
|
||||||
*/
|
*/
|
||||||
int reordering_queue_size;
|
int reordering_queue_size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User-Agent string
|
||||||
|
*/
|
||||||
|
char *user_agent;
|
||||||
} RTSPState;
|
} RTSPState;
|
||||||
|
|
||||||
#define RTSP_FLAG_FILTER_SRC 0x1 /**< Filter incoming UDP packets -
|
#define RTSP_FLAG_FILTER_SRC 0x1 /**< Filter incoming UDP packets -
|
||||||
|
@ -574,6 +574,8 @@ int ff_rtsp_setup_input_streams(AVFormatContext *s, RTSPMessageHeader *reply)
|
|||||||
/* describe the stream */
|
/* describe the stream */
|
||||||
snprintf(cmd, sizeof(cmd),
|
snprintf(cmd, sizeof(cmd),
|
||||||
"Accept: application/sdp\r\n");
|
"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) {
|
if (rt->server_type == RTSP_SERVER_REAL) {
|
||||||
/**
|
/**
|
||||||
* The Require: attribute is needed for proper streaming from
|
* The Require: attribute is needed for proper streaming from
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 55
|
#define LIBAVFORMAT_VERSION_MAJOR 55
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 12
|
#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, \
|
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||||
LIBAVFORMAT_VERSION_MINOR, \
|
LIBAVFORMAT_VERSION_MINOR, \
|
||||||
|
Loading…
Reference in New Issue
Block a user