Hi,
I wrote a gstreamer application that has a RTP stream and I want to convert this program to a RTSP stream. The major problem is that I used GstMessages to communicate from one Element to another via the GstBus in the main application. The idee is: I have a video path with low latency and a computation path that skips a lot of frames and has more latency. The GstMessages are send from the computation path to the main application and in there I feed the data to an annotation element in the video path. So what I did in the RTP variant is: I made a pipeline with 'gst_parse_launch' and used this pipeline(as a GstElement) to get the GstBus. Add a watch on this bus and use this callback to send the GstMessages to another element in the pipeline. (via a pointer to a struct received via g_object_get). When I try to convert this program to one using RTSP, I struggle to get the GstMessages from the bus. I made a subclass MediaFactory where I override the create_element and save a pointer to the pipeline(GstElement) received from gst_parse_launch. Then in the main application I make my MediaFactory and connect the media-configure to a callback function. In this callback function I get the GstBus(saved in my factory) from the factory and try to add a watch to this Bus. But I get an error 'gst_bus_create_watch: assertion 'bus->priv->poll != NULL' failed'. Is this the correct way to receive messages from the created bus in a RTSP scenario? Similar posts: http://gstreamer-devel.966125.n4.nabble.com/Using-C-API-based-pipelines-in-RTSP-server-without-quot-launch-quot-arg-td4680144.html#a4680415 <http://gstreamer-devel.966125.n4.nabble.com/Using-C-API-based-pipelines-in-RTSP-server-without-quot-launch-quot-arg-td4680144.html#a4680415> -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Administrator
|
what does you pipeline look like?
-- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
------------------------------
Gstreamer 1.16.2 ------------------------------ Windows |
killerrats wrote
> what does you pipeline look like? Something like this. videotestsrc -> tee -> queue -> myOwnAnnotationElement -> autovideosink | | | | | -> queue -> motioncells (sends messages on the Bus) -> fakesink The main application catches ths messages from motioncells and puts them in my annotation element. -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
In reply to this post by Toon Heyrman
Hi,
On 20/10/17 18:55, Toon Heyrman wrote: > Hi, > > I wrote a gstreamer application that has a RTP stream and I want to convert > this program to a RTSP stream. The major problem is that I used GstMessages > to communicate from one Element to another via the GstBus in the main > application. > > The idee is: > I have a video path with low latency and a computation path that skips a lot > of frames and has more latency. The GstMessages are send from the > computation path to the main application and in there I feed the data to an > annotation element in the video path. > > So what I did in the RTP variant is: > I made a pipeline with 'gst_parse_launch' and used this pipeline(as a > GstElement) to get the GstBus. > Add a watch on this bus and use this callback to send the GstMessages to > another element in the pipeline. (via a pointer to a struct received via > g_object_get). > > When I try to convert this program to one using RTSP, I struggle to get the > GstMessages from the bus. > I made a subclass MediaFactory where I override the create_element and save > a pointer to the pipeline(GstElement) received from gst_parse_launch. > Then in the main application I make my MediaFactory and connect the > media-configure to a callback function. In this callback function I get the > GstBus(saved in my factory) from the factory and try to add a watch to this > Bus. > But I get an error 'gst_bus_create_watch: assertion 'bus->priv->poll != > NULL' failed'. message watch on the bus, and there can only be 1 at a time. The only way I can think of to work around that is to place your elements and pipeline piece inside a custom GstBin instead of the default one. Derive your own GstBin sub-class, and override the handle_message virtual method. That way, you can siphon off the messages you're interested in, and pass the others to the parent GstBin implementation to get normal behaviour for all other messages. Regards, Jan. > Is this the correct way to receive messages from the created bus in a RTSP > scenario? > > > Similar posts: > http://gstreamer-devel.966125.n4.nabble.com/Using-C-API-based-pipelines-in-RTSP-server-without-quot-launch-quot-arg-td4680144.html#a4680415 > <http://gstreamer-devel.966125.n4.nabble.com/Using-C-API-based-pipelines-in-RTSP-server-without-quot-launch-quot-arg-td4680144.html#a4680415> > > > > > -- > Sent from: http://gstreamer-devel.966125.n4.nabble.com/ > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |