答复: Synchronizing h264 stream from appsink to appsrc for RTSP

Liu Xin liuxin8166 at hotmail.com
Fri Jun 2 10:24:11 UTC 2017


hi folks,


I have the same question as Oliver had asked.


In the gst-rtsp-server/examples, all the source code uses gst_rtsp_media_factory_set_launch() to let the factory make pipelines with gst-launch string. But what if I have a pipeline already, and I want to assign the rtsp URI to that pipeline?

Any ideas?

Thanks,
Xin
________________________________
发件人: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org> 代表 Oliver <ogtifs at gmail.com>
发送时间: 2017年5月21日 19:39
收件人: gstreamer-devel at lists.freedesktop.org
主题: Synchronizing h264 stream from appsink to appsrc for RTSP

Hi all,

I am trying to use gstreamer to simultaneously stream a video source via RTSP and record it (and in the future, more parallel processes).

My main problem with the gst-rtsp-server examples is that the RTSP component wants to control the whole pipeline, and I don't want it to impact one of the other branches. My approach to this problem (I would be happy to hear a simpler way) is to use a primary, always-running pipeline which branches to an appsink, and allow the RTSP server to create its own pipeline using an appsrc, which I connect to the appsink in the GstRtspMediaFactory's "media-configured" signal handler.

For the purposes of example, my "main" pipeline can be "videotestsrc ! appsink" (later with tee to filesink), and the rtsp factory bin can be "appsrc ! x264enc ! rtph264pay". In this case, it works, that is to say I can connect a media player to the RTSP stream and see the test image, although the memory usage explodes uncontrollably quite quickly.

If I move the x264enc element to the "main" pipeline, which I want to do so it can be shared between the parallel functions, I never see any picture, and gst-play reports "Could not receive any udp packets". In neither case do I see errors on the server side with GST_DEBUG=*:3, and in both cases I set the appsrc caps to the caps from the last element in the "main" pipeline before the appsink.

I checked that the RTSP pipeline's clock is slaved to the main pipeline clock (this seemed to happen automatically), but I guess I have some synchronization issues. Perhaps that can explain the memory explosion when passing raw packets too? Since assumedly the appsink is receiving frames much more quickly than the appsrc can send them onwards. In any case I am more interested in first getting the h264 appsink->appsrc link to work.

I pasted a short code listing at pastebin.com/Lgc7BF1p<http://pastebin.com/Lgc7BF1p> (not sure of the preferred etiquette for this ML)
[https://pastebin.com/i/facebook.png]<http://pastebin.com/Lgc7BF1p>

[C] gst-rtsp-server with appsrc - Pastebin.com<http://pastebin.com/Lgc7BF1p>
pastebin.com




Thanks for all advice!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20170602/be27bc36/attachment.html>


More information about the gstreamer-devel mailing list