mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
rtspsrc: handle segment event
Make a segment event when we send a new range header to a client (first PLAY request or after a seek). Send the segment event in interleaved mode. Clean the segment event on cleanup Fixes https://bugzilla.gnome.org/show_bug.cgi?id=688382
This commit is contained in:
parent
bd91bd3193
commit
c28bfa8902
1 changed files with 14 additions and 5 deletions
|
@ -1247,6 +1247,10 @@ gst_rtspsrc_cleanup (GstRTSPSrc * src)
|
||||||
gst_sdp_message_free (src->sdp);
|
gst_sdp_message_free (src->sdp);
|
||||||
src->sdp = NULL;
|
src->sdp = NULL;
|
||||||
}
|
}
|
||||||
|
if (src->start_segment) {
|
||||||
|
gst_event_unref (src->start_segment);
|
||||||
|
src->start_segment = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PARSE_INT(p, del, res) \
|
#define PARSE_INT(p, del, res) \
|
||||||
|
@ -1924,11 +1928,6 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
|
||||||
GST_DEBUG_OBJECT (src, "Creating newsegment from %" G_GINT64_FORMAT
|
GST_DEBUG_OBJECT (src, "Creating newsegment from %" G_GINT64_FORMAT
|
||||||
" to %" G_GINT64_FORMAT, src->segment.position, stop);
|
" to %" G_GINT64_FORMAT, src->segment.position, stop);
|
||||||
|
|
||||||
/* store the newsegment event so it can be sent from the streaming thread. */
|
|
||||||
if (src->start_segment)
|
|
||||||
gst_event_unref (src->start_segment);
|
|
||||||
src->start_segment = gst_event_new_segment (&src->segment);
|
|
||||||
|
|
||||||
/* mark discont */
|
/* mark discont */
|
||||||
GST_DEBUG_OBJECT (src, "mark DISCONT, we did a seek to another position");
|
GST_DEBUG_OBJECT (src, "mark DISCONT, we did a seek to another position");
|
||||||
for (walk = src->streams; walk; walk = g_list_next (walk)) {
|
for (walk = src->streams; walk; walk = g_list_next (walk)) {
|
||||||
|
@ -3577,6 +3576,7 @@ gst_rtspsrc_loop_interleaved (GstRTSPSrc * src)
|
||||||
GstFlowReturn ret = GST_FLOW_OK;
|
GstFlowReturn ret = GST_FLOW_OK;
|
||||||
GstBuffer *buf;
|
GstBuffer *buf;
|
||||||
gboolean is_rtcp, have_data;
|
gboolean is_rtcp, have_data;
|
||||||
|
GstEvent *event;
|
||||||
|
|
||||||
/* here we are only interested in data messages */
|
/* here we are only interested in data messages */
|
||||||
have_data = FALSE;
|
have_data = FALSE;
|
||||||
|
@ -3707,6 +3707,10 @@ gst_rtspsrc_loop_interleaved (GstRTSPSrc * src)
|
||||||
gst_rtspsrc_activate_streams (src);
|
gst_rtspsrc_activate_streams (src);
|
||||||
src->need_activate = FALSE;
|
src->need_activate = FALSE;
|
||||||
}
|
}
|
||||||
|
if ((event = src->start_segment) != NULL) {
|
||||||
|
src->start_segment = NULL;
|
||||||
|
gst_rtspsrc_push_event (src, event);
|
||||||
|
}
|
||||||
|
|
||||||
if (src->base_time == -1) {
|
if (src->base_time == -1) {
|
||||||
/* Take current running_time. This timestamp will be put on
|
/* Take current running_time. This timestamp will be put on
|
||||||
|
@ -6197,6 +6201,11 @@ gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment, gboolean async)
|
||||||
|
|
||||||
gst_rtsp_message_add_header (&request, GST_RTSP_HDR_RANGE, hval);
|
gst_rtsp_message_add_header (&request, GST_RTSP_HDR_RANGE, hval);
|
||||||
g_free (hval);
|
g_free (hval);
|
||||||
|
|
||||||
|
/* store the newsegment event so it can be sent from the streaming thread. */
|
||||||
|
if (src->start_segment)
|
||||||
|
gst_event_unref (src->start_segment);
|
||||||
|
src->start_segment = gst_event_new_segment (&src->segment);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (segment->rate != 1.0) {
|
if (segment->rate != 1.0) {
|
||||||
|
|
Loading…
Reference in a new issue