diff --git a/gst/flv/gstflvmux.c b/gst/flv/gstflvmux.c index c427f529cc..f2b9688cd2 100644 --- a/gst/flv/gstflvmux.c +++ b/gst/flv/gstflvmux.c @@ -1106,6 +1106,29 @@ gst_flv_mux_write_header (GstFlvMux * mux) GSList *l; GstFlowReturn ret; + /* if not streaming, check if downstream is seekable */ + if (!mux->streamable) { + gboolean seekable; + GstQuery *query; + + query = gst_query_new_seeking (GST_FORMAT_BYTES); + if (gst_pad_peer_query (mux->srcpad, query)) { + gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL); + GST_INFO_OBJECT (mux, "downstream is %sseekable", seekable ? "" : "not "); + if (!seekable) { + mux->streamable = TRUE; + g_object_notify (G_OBJECT (mux), "streamable"); + GST_WARNING_OBJECT (mux, "downstream is not seekable, but " + "streamable=false. Will ignore that and create streamable output " + "instead"); + } + } else { + /* have to assume seeking is supported if query not handled downstream */ + /* FIXME 0.11: change to query not handled => seeking not supported */ + GST_WARNING_OBJECT (mux, "downstream did not handle seeking query"); + } + } + header = gst_flv_mux_create_header (mux); metadata = gst_flv_mux_create_metadata (mux, TRUE); video_codec_data = NULL;