mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
rtsp: Allow setting the reordering buffer size via an AVOption
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
1c37744963
commit
3f055f8f5f
@ -74,6 +74,9 @@
|
|||||||
{ "audio", "Audio", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_AUDIO}, 0, 0, DEC, "allowed_media_types" }, \
|
{ "audio", "Audio", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_AUDIO}, 0, 0, DEC, "allowed_media_types" }, \
|
||||||
{ "data", "Data", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_DATA}, 0, 0, DEC, "allowed_media_types" }
|
{ "data", "Data", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_DATA}, 0, 0, DEC, "allowed_media_types" }
|
||||||
|
|
||||||
|
#define RTSP_REORDERING_OPTS() \
|
||||||
|
{ "reorder_queue_size", "Number of packets to buffer for handling of reordered packets", OFFSET(reordering_queue_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, DEC }
|
||||||
|
|
||||||
const AVOption ff_rtsp_options[] = {
|
const AVOption ff_rtsp_options[] = {
|
||||||
{ "initial_pause", "Don't start playing the stream immediately", OFFSET(initial_pause), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC },
|
{ "initial_pause", "Don't start playing the stream immediately", OFFSET(initial_pause), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC },
|
||||||
FF_RTP_FLAG_OPTS(RTSPState, rtp_muxer_flags),
|
FF_RTP_FLAG_OPTS(RTSPState, rtp_muxer_flags),
|
||||||
@ -87,17 +90,20 @@ const AVOption ff_rtsp_options[] = {
|
|||||||
{ "min_port", "Minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC },
|
{ "min_port", "Minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC },
|
||||||
{ "max_port", "Maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC },
|
{ "max_port", "Maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC },
|
||||||
{ "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 },
|
||||||
|
RTSP_REORDERING_OPTS(),
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const AVOption sdp_options[] = {
|
static const AVOption sdp_options[] = {
|
||||||
RTSP_FLAG_OPTS("sdp_flags", "SDP flags"),
|
RTSP_FLAG_OPTS("sdp_flags", "SDP flags"),
|
||||||
RTSP_MEDIATYPE_OPTS("allowed_media_types", "Media types to accept from the server"),
|
RTSP_MEDIATYPE_OPTS("allowed_media_types", "Media types to accept from the server"),
|
||||||
|
RTSP_REORDERING_OPTS(),
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const AVOption rtp_options[] = {
|
static const AVOption rtp_options[] = {
|
||||||
RTSP_FLAG_OPTS("rtp_flags", "RTP flags"),
|
RTSP_FLAG_OPTS("rtp_flags", "RTP flags"),
|
||||||
|
RTSP_REORDERING_OPTS(),
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -607,6 +613,13 @@ int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
|
|||||||
{
|
{
|
||||||
RTSPState *rt = s->priv_data;
|
RTSPState *rt = s->priv_data;
|
||||||
AVStream *st = NULL;
|
AVStream *st = NULL;
|
||||||
|
int reordering_queue_size = rt->reordering_queue_size;
|
||||||
|
if (reordering_queue_size < 0) {
|
||||||
|
if (rt->lower_transport == RTSP_LOWER_TRANSPORT_TCP || !s->max_delay)
|
||||||
|
reordering_queue_size = 0;
|
||||||
|
else
|
||||||
|
reordering_queue_size = RTP_REORDER_QUEUE_DEFAULT_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
/* open the RTP context */
|
/* open the RTP context */
|
||||||
if (rtsp_st->stream_index >= 0)
|
if (rtsp_st->stream_index >= 0)
|
||||||
@ -631,8 +644,7 @@ int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
|
|||||||
else if (CONFIG_RTPDEC)
|
else if (CONFIG_RTPDEC)
|
||||||
rtsp_st->transport_priv = ff_rtp_parse_open(s, st, rtsp_st->rtp_handle,
|
rtsp_st->transport_priv = ff_rtp_parse_open(s, st, rtsp_st->rtp_handle,
|
||||||
rtsp_st->sdp_payload_type,
|
rtsp_st->sdp_payload_type,
|
||||||
(rt->lower_transport == RTSP_LOWER_TRANSPORT_TCP || !s->max_delay)
|
reordering_queue_size);
|
||||||
? 0 : RTP_REORDER_QUEUE_DEFAULT_SIZE);
|
|
||||||
|
|
||||||
if (!rtsp_st->transport_priv) {
|
if (!rtsp_st->transport_priv) {
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
@ -385,6 +385,11 @@ typedef struct RTSPState {
|
|||||||
* Timeout to wait for incoming connections.
|
* Timeout to wait for incoming connections.
|
||||||
*/
|
*/
|
||||||
int initial_timeout;
|
int initial_timeout;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Size of RTP packet reordering queue.
|
||||||
|
*/
|
||||||
|
int reordering_queue_size;
|
||||||
} RTSPState;
|
} RTSPState;
|
||||||
|
|
||||||
#define RTSP_FLAG_FILTER_SRC 0x1 /**< Filter incoming UDP packets -
|
#define RTSP_FLAG_FILTER_SRC 0x1 /**< Filter incoming UDP packets -
|
||||||
|
Loading…
Reference in New Issue
Block a user