Hello,
We have a client SW that receive from a server OPUS packets that client should play.
The client is designed in Linux and use GStreamer playbin2 pipeline for this:
pipeline = gst_parse_launch ("playbin2 uri=appsrc:// ", NULL);
where the
appsrc
we fill with OPUS packets into a callback function that is called anytime player need data to play.
g_signal_connect (pipeline, "source-setup", G_CALLBACK (need_data_cb), NULL);
static void need_data_cb(GstElement *appsrc, guint unused_size, gpointer user_data)
{
GstBuffer *buffer = gst_buffer_new_and_alloc(NETPKT_DATASIZE);
GstFlowReturn ret;
av_fifo_generic_read(netpkt_stream, buffer, NETPKT_TTLSIZE, av_fifo_cb);
g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);
gst_buffer_unref (buffer);
id2play++;
if(ret != GST_FLOW_OK) {
g_main_loop_quit(loop);
}
}
The problem is that after exact 64 second the Sound stop (after playing certain number of OPUS packets).
Each OPUS packets have a duration of 177ms and is coded as OPUS bit rate 48000.
In Log I get this when it stop playing:
GStreamer-WARNING **: failed to create thread: Error creating thread: Resource temporarily unavailable
(client:17452): GStreamer-WARNING **: adding flushing pad 'src0' to running element 'multiqueue3612', you need to use gst_pad_set_active(pad,TRUE) before adding it.
I observed also the memory used it increase by every packet played.
Can you help me with some hints what can I do or which is the cause of this behavior?
The client code is designed like here
http://docs.gstreamer.com/display/GstSDK/Playback+tutorial+3%3A+Short-cutting+the+pipeline[
^]
Thanks in advance
Robi