[Bug 767682] New: Mpeg DASh live streaming header's update

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Wed Jun 15 08:48:45 UTC 2016


https://bugzilla.gnome.org/show_bug.cgi?id=767682

            Bug ID: 767682
           Summary: Mpeg DASh live streaming header's update
    Classification: Platform
           Product: GStreamer
           Version: 1.4.5
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: r97922153 at gmail.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

Dear members:

I met a problem under my develop board which bases on older GStreamer (1.4.5)
branch bur had also checked the latest version also.

The problem is when live streaming Mpeg DASH, on my side sometimes I got (read
in) a wrong stream which may lead to MOSAIC (decode fail) issue.

The problem is:

when MPD is updated, a default "slow start" policy is applied as below.
...
#else
  /* slow start */
  representation = gst_mpdparser_get_lowest_representation (rep_list);
#endif
...

It makes the representation to become the lowest bit-rate one.

However, at least for 1.4.5 I see no header of the lowest bit-rate is
downloaded. It will make us to decode the lowest bit-rate representation by the
codec-data from other representation. So it definitely will make a decode fail
& MOSAIC happens.

I search adaptivedemux.c & found there are 4 places where will set
"stream->need_header = TRUE". I think only stream->need_header = TRUE we will
update (download) a new header again for representation of the lowest bit-rate.

The 4 places are listed below:
1. gst_adaptive_demux_expose_stream()
2. gst_adaptive_demux_src_event - case stream->need_header = TRUE;
3. gst_adaptive_demux_stop_tasks()
4. when gst_adaptive_demux_stream_select_bitrate() returns TRUE - means we have
a bit-rate change.

For 1.4.5,the slow start logic goes through the execution path about:
from gst_adaptive_demux_updates_loop -> gst_adaptive_demux_update_manifest ->
gst_adaptive_demux_update_manifest_default
->gst_dash_demux_update_manifest_data -> gst_dash_demux_setup_mpdparser_streams
-> gst_mpd_client_setup_streaming

But it seems that there is no chance to set need_header = TRUE so once we jump
to the lowest bit-rate representation & previous header does not match, we will
get problem.

Could anyone help to check the problem? 

Should we need to set need_header as TRUE every time when we update manifest?

static GstFlowReturn
gst_adaptive_demux_update_manifest (GstAdaptiveDemux * demux)
{
...
  ret = klass->update_manifest (demux);

  if (ret == GST_FLOW_OK) {
    ...
    + for (iter = demux->streams; iter; iter = g_list_next (iter)) {
    +  GstAdaptiveDemuxStream *stream = iter->data;
    +  stream->need_header = TRUE;
    + }
    ...
  }
  return ret;
}
Thank you.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list