Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What the queue element do in Gstreamer pipeline

Tags:

gstreamer

I have this pipeline :

gst-launch -v filesrc location=video.mkv ! matroskademux name=d \
d. ! queue ! ffdec_h264 ! subtitleoverlay name=overlay ! ffmpegcolorspace ! x264enc ! mux. \
d. ! queue ! aacparse ! mux. \
filesrc location=fr.srt ! subparse ! overlay. \
matroskamux name=mux ! filesink location=vid.mkv

I'm trying to burn the subtitles to the video. I have succdeded to read the file with the subtitles but the above pipeline stuck and I have this message :

queue_dataflow gstqueue.c:1243:gst_queue_loop:<queue0> queue is empty

What's wrong with my pipeline? What the queue element do? I haven't really understood what it said in the doc.

like image 839
Hunsu Avatar asked Oct 27 '14 10:10

Hunsu


1 Answers

The queue element adds a thread boundary to the pipeline and support for buffering. The input side will put buffers into a queue, which is then emptied on the output side from another thread. Via properties on the queue element you can set the size of the queue and some other things.

I don't see anything specifically wrong with your pipeline, but the message there tells you that at some point one of the queues is empty. Which might be a problem or not. It might become fuller again later.

You'll have to check the GStreamer debug logs to see if there's anything in there that hints at the actual problem. My best guess here would be that the audio queue running full because of the encoder latency of x264enc. Try making the audio queue larger, or set tune=zerolatency on x264enc.

Also I see that you're using GStreamer 0.10. It is no longer maintained since more than two years and for new applications you should really consider upgrading to the 1.x versions.

like image 127
Sebastian Dröge Avatar answered Sep 27 '22 22:09

Sebastian Dröge