[Bug 759170] New: hlsdemux: doesn't commence writing fragments when inserted into already playing pipeline

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Tue Dec 8 04:02:22 PST 2015


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

            Bug ID: 759170
           Summary: hlsdemux: doesn't commence writing fragments when
                    inserted into already playing pipeline
    Classification: Platform
           Product: GStreamer
           Version: 1.6.0
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: fraxinas at opendreambox.org
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

i've got an application that builds the following pipeline:

audiosrc ! aacparse  ! aqueue ! \             / ! hlsqueue ! hlssink 
                                 .tsmux ! .tee 
videosrc ! h264parse ! vqueue ! /             \ ! appqueue ! appsink

when i set the hlssink to PLAYING first, all works fine and fragments are
generated as expected.

however, when i have appsink at PLAYING first and add hlssink once the playing
time has already advanced, fragment generation will not commence.

i've done some debugging and i by adding a buffer probe at both hlsqueue's and
hlssink's sinkpads i found out the following, in the running case (hlssink goes
into PLAYING from the very beginning)

the first bufferlist passes through hlsqueue
probe_hls_stream: probing bufferlist 0x732181e8 with 117 elements on pad
hlsqueue:sink
probe_hls_stream: probing bufferlist 0x732181e8 with 117 elements on pad
hlssink:sink

and is seen by hlssink
gst_hls_sink_chain_list:<hlssink:sink> chaining each group in list as a merged
buffer

and it requests a new key_unit from upstream
gst_hls_sink_check_schedule_next_key_unit:buffer: 0x73203160, pts
0:00:00.000000000, dts 99:99:99.999999999, dur 99:99:99.999999999, size 188,
offset none, offset_end none, flags 0x4400 
schedule_next_key_unit:<hlssink> sending upstream force-key-unit, index 1 now
0:00:00.000000000 target 0:00:02.000000000

then something happens that i don't really understand - there's a single buffer
seen at the hlssink sinkpad that hadn't previously gone into the hlsqueue:
probe_hls_stream: probing buffer buffer: 0x73203160, pts 0:00:00.000000000, dts
99:99:99.999999999, dur 99:99:99.999999999, size 188, offset none, offset_end
none, flags 0x4400 on pad hlssink:sink

after that, gst_hls_sink_ghost_buffer_probe is called 117 times with
sink->waiting_fku=1

then then the next bufferlist passes through the hlsqueue, causing
gst_hls_sink_chain_list to be called every time until fragment duration is
reached, then it increases the index count and continues fine


in the FAIL case, when hlssink is inserted into a running pipeline,
it works the same way up to the first gst_hls_sink_ghost_buffer_probe call, and
then apparently goes blocking after that, i could only see the probe callbacks
on hlsqueue:sink, not on hlssink:sink and eventually the queue (max-size-time
is fragment duration * 2) runs full and also blocks.

i've put some more debug into gst_hls_sink_chain_list and found out, that
chaining up on the default gst_pad_chain () never returns, so this must be the
culprit.

-- 
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