decode byte-stream video without gmainloop

Nicolas Dufresne nicolas at ndufresne.ca
Mon Feb 3 02:15:39 UTC 2020


Le dimanche 02 février 2020 à 22:10 +0000, Karl Lattimer a écrit :
> I’m trying to integrate gstreamer with RpiPlay (https://github.com/FD-/RPiPlay) for generic linux support (https://github.com/FD-/RPiPlay/issues/24) and looking at the gstreamer documentation it seems difficult to find a method to write a buffer of received bytes to a pipeline. 
> 
> Specifically I need to take the method call 
> 
> void video_renderer_render_buffer(video_renderer_t *renderer,
> raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts, int
> type)
> 
> and push that data into a gstreamer pipeline. As far as I understand
> the raop_ntp_t struct contains information regarding time
> synchronisation and pts provides an accurate timestamp. In my tests
> with gstreamer so far I’ve taken the buffer, dumped it to disk as an
> MP4 file, then used a simple playbin pipeline to open the file and
> play it. 

Have you looked at the appsrc element ? Note that GStreamer processing
is asynchronous, so you may have to copy the pointer, or make sure that
your wrapped buffer is consumed before returning.

> 
> I suppose what I’m looking for here are pointers to the appropriate
> documentation for pushing a block of data into a decode pipeline,
> preferably without going as far as writing a gstreamer plugin as that
> wouldn’t sit well with the rest of the project. 

https://gstreamer.freedesktop.org/documentation/tutorials/basic/short-cutting-the-pipeline.html?gi-language=c

> 
> I’d also like to know if it’s possible to get a playbin to dump the
> pipeline that it’s using out somehow, there’s quite a lot of
> information in the verbose output, but I can’t seem to spot a
> pipeline which I could use on the command line in place of playbin, I
> think that would help me in the final goal. 

When you are using gst-launch-1.0 you can dump the pipeline into DOT
files using the env GST_DEBUG_DUMP_DOT_DIR=

To get the same thing in your application, you have to call:

  GST_DEBUG_BIN_TO_DOT_FILE(bin, GST_DEBUG_GRAPH_SHOW_ALL, file_name);

This needs to be called wherever in your code you would like to inspect
the pipeline.

> 
> Advice, guidance, links, examples appreciated. 
> 
>> 
> Regards,
>  K
> 
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



More information about the gstreamer-devel mailing list