Folks, I have the following issue:<div><br></div><div>I am playing an h264 clip, but not from the very beginning (imagine this simulates the case of streaming AV input).</div><div><br></div><div>What happens is that the first I-frame is lost, which causes the video decoder to discard the frames that follow.</div>

<div><br></div><div>Meanwhile, the audio path fills up until all of the queues and buffers on that path are full.  At this point the demux blocks (it can't send any more buffers), and the audio_sink is blocked waiting for prerolling to complete so that it can go to the PLAYING state.  Deadlock.</div>

<div><br></div><div>What should I do about this?</div><div><br></div><div>I have a few ideas, but none of them are great.</div><div>1. We could try to adjust the gstreamer "prerolling" strategy.  (Allow audio to play even though video is not ready, or similar.  special case it).  The problem is that doing this is somewhat hackish, and breaks the general gstreamer "way"</div>

<div>2. We could set up the demux to automatically discard data on one path if the other path has not prerolled.  This also breaks the gstreamer "way" though because it requires the demux and sink elements to be aware of each other.</div>

<div>3. Let the application handle it (detect the stuck state and flush the audio sink).  But this means that a pipeline constructed with gst-launch would fail, which is less than ideal.  It's also not the cleanest solution anyway.</div>

<div>4. We could adjust things to read at the beginning of the input file.  This is not a real fix though because in the case of streaming data, we would never know when the connection would be made.  Fixing the lost-data issue will fix the specific file-based cases, but will not fix the general problem.</div>

<div>5. Could have some sort of detection element that looks at the whole stream and chucks data until an I-frame is detected (or the demux could do this directly).  This would be a big hassle of course.  </div><div><br>
</div>
<div>None of these are great options.  Anything I missed?</div><div><br></div><div>Thanks,</div><div>Eric</div>