dashdemux2: Add start-bitrate property
Similarly to hlsdemux2 that has this property, also add it to dashdemux2 so users can use it to choose first alternate. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3894>
This commit is contained in:
parent
9d720554a0
commit
d86b2d4efa
@ -1102,6 +1102,20 @@
|
|||||||
"readable": true,
|
"readable": true,
|
||||||
"type": "gchararray",
|
"type": "gchararray",
|
||||||
"writable": true
|
"writable": true
|
||||||
|
},
|
||||||
|
"start-bitrate": {
|
||||||
|
"blurb": "Initial bitrate to use to choose first alternate (0 = automatic) (bits/s)",
|
||||||
|
"conditionally-available": false,
|
||||||
|
"construct": false,
|
||||||
|
"construct-only": false,
|
||||||
|
"controllable": false,
|
||||||
|
"default": "0",
|
||||||
|
"max": "-1",
|
||||||
|
"min": "0",
|
||||||
|
"mutable": "null",
|
||||||
|
"readable": true,
|
||||||
|
"type": "guint",
|
||||||
|
"writable": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rank": "primary + 1"
|
"rank": "primary + 1"
|
||||||
|
@ -310,6 +310,7 @@ enum
|
|||||||
PROP_MAX_VIDEO_HEIGHT,
|
PROP_MAX_VIDEO_HEIGHT,
|
||||||
PROP_MAX_VIDEO_FRAMERATE,
|
PROP_MAX_VIDEO_FRAMERATE,
|
||||||
PROP_PRESENTATION_DELAY,
|
PROP_PRESENTATION_DELAY,
|
||||||
|
PROP_START_BITRATE,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -319,6 +320,7 @@ enum
|
|||||||
#define DEFAULT_MAX_VIDEO_FRAMERATE_N 0
|
#define DEFAULT_MAX_VIDEO_FRAMERATE_N 0
|
||||||
#define DEFAULT_MAX_VIDEO_FRAMERATE_D 1
|
#define DEFAULT_MAX_VIDEO_FRAMERATE_D 1
|
||||||
#define DEFAULT_PRESENTATION_DELAY "10s" /* 10s */
|
#define DEFAULT_PRESENTATION_DELAY "10s" /* 10s */
|
||||||
|
#define DEFAULT_START_BITRATE 0
|
||||||
|
|
||||||
/* Clock drift compensation for live streams */
|
/* Clock drift compensation for live streams */
|
||||||
#define SLOW_CLOCK_UPDATE_INTERVAL (1000000 * 30 * 60) /* 30 minutes */
|
#define SLOW_CLOCK_UPDATE_INTERVAL (1000000 * 30 * 60) /* 30 minutes */
|
||||||
@ -633,6 +635,17 @@ gst_dash_demux2_class_init (GstDashDemux2Class * klass)
|
|||||||
DEFAULT_PRESENTATION_DELAY,
|
DEFAULT_PRESENTATION_DELAY,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dashdemux2:start-bitrate:
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class, PROP_START_BITRATE,
|
||||||
|
g_param_spec_uint ("start-bitrate", "Starting Bitrate",
|
||||||
|
"Initial bitrate to use to choose first alternate (0 = automatic) (bits/s)",
|
||||||
|
0, G_MAXUINT, DEFAULT_START_BITRATE,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template (gstelement_class, &sinktemplate);
|
gst_element_class_add_static_pad_template (gstelement_class, &sinktemplate);
|
||||||
|
|
||||||
gst_element_class_set_static_metadata (gstelement_class,
|
gst_element_class_set_static_metadata (gstelement_class,
|
||||||
@ -697,6 +710,9 @@ gst_dash_demux_set_property (GObject * object, guint prop_id,
|
|||||||
g_free (demux->default_presentation_delay);
|
g_free (demux->default_presentation_delay);
|
||||||
demux->default_presentation_delay = g_value_dup_string (value);
|
demux->default_presentation_delay = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_START_BITRATE:
|
||||||
|
demux->start_bitrate = g_value_get_uint (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -726,6 +742,9 @@ gst_dash_demux_get_property (GObject * object, guint prop_id, GValue * value,
|
|||||||
else
|
else
|
||||||
g_value_set_string (value, demux->default_presentation_delay);
|
g_value_set_string (value, demux->default_presentation_delay);
|
||||||
break;
|
break;
|
||||||
|
case PROP_START_BITRATE:
|
||||||
|
g_value_set_uint (value, demux->start_bitrate);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -738,19 +757,20 @@ gst_dash_demux_setup_mpdparser_streams (GstDashDemux2 * demux,
|
|||||||
{
|
{
|
||||||
gboolean has_streams = FALSE;
|
gboolean has_streams = FALSE;
|
||||||
GList *adapt_sets, *iter;
|
GList *adapt_sets, *iter;
|
||||||
guint connection_bitrate;
|
guint start_bitrate = demux->start_bitrate;
|
||||||
|
|
||||||
/* Using g_object_get so it goes through mutex locking in adaptivedemux2 */
|
if (start_bitrate == 0) {
|
||||||
g_object_get (demux, "connection-bitrate", &connection_bitrate, NULL);
|
/* Using g_object_get so it goes through mutex locking in adaptivedemux2 */
|
||||||
|
g_object_get (demux, "connection-bitrate", &start_bitrate, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
adapt_sets = gst_mpd_client2_get_adaptation_sets (client);
|
adapt_sets = gst_mpd_client2_get_adaptation_sets (client);
|
||||||
for (iter = adapt_sets; iter; iter = g_list_next (iter)) {
|
for (iter = adapt_sets; iter; iter = g_list_next (iter)) {
|
||||||
GstMPDAdaptationSetNode *adapt_set_node = iter->data;
|
GstMPDAdaptationSetNode *adapt_set_node = iter->data;
|
||||||
|
|
||||||
has_streams |= gst_mpd_client2_setup_streaming (client, adapt_set_node,
|
has_streams |= gst_mpd_client2_setup_streaming (client, adapt_set_node,
|
||||||
connection_bitrate, demux->max_video_width,
|
start_bitrate, demux->max_video_width, demux->max_video_height,
|
||||||
demux->max_video_height, demux->max_video_framerate_n,
|
demux->max_video_framerate_n, demux->max_video_framerate_d);
|
||||||
demux->max_video_framerate_d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!has_streams) {
|
if (!has_streams) {
|
||||||
@ -2289,6 +2309,10 @@ gst_dash_demux_stream_select_bitrate (GstAdaptiveDemux2Stream * stream,
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If not calculated yet, continue using start bitrate */
|
||||||
|
if (bitrate == 0)
|
||||||
|
bitrate = demux->start_bitrate;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (stream,
|
GST_DEBUG_OBJECT (stream,
|
||||||
"Trying to change to bitrate: %" G_GUINT64_FORMAT, bitrate);
|
"Trying to change to bitrate: %" G_GUINT64_FORMAT, bitrate);
|
||||||
|
|
||||||
|
@ -155,6 +155,7 @@ struct _GstDashDemux2
|
|||||||
gint max_video_width, max_video_height;
|
gint max_video_width, max_video_height;
|
||||||
gint max_video_framerate_n, max_video_framerate_d;
|
gint max_video_framerate_n, max_video_framerate_d;
|
||||||
gchar* default_presentation_delay; /* presentation time delay if MPD@suggestedPresentationDelay is not present */
|
gchar* default_presentation_delay; /* presentation time delay if MPD@suggestedPresentationDelay is not present */
|
||||||
|
guint start_bitrate; /* Initial bitrate to use before any bandwidth measurement */
|
||||||
|
|
||||||
gboolean allow_trickmode_key_units;
|
gboolean allow_trickmode_key_units;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user