RTSP source pipeline not working in static mode

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

RTSP source pipeline not working in static mode

Marcin Woźniak
Hello and hi to all,
I am fighting with latest 1.8 gstreamer tree to have a pipe to get RTSP
H264 stream and put it into a filesink.
All works well when i compile 1.8 branch using dynamic linking (.so
modules). But as i need to move it further and crosscompile it to ARM
board - i need it to compile as a static executable.
I studied this group, compiled gstreamer with --enable-static and
---disable-registry and plugins trees with --enable-static-plugins.
Then i created a small piece of code to test with:
pipeline = gst_parse_launch ("rtspsrc location=rtsp://XXXXX/
protocols=GST_RTSP_LOWER_TRANS_TCP ! rtph264depay ! fakesink", NULL);
and ran it.
And voila - it works well when all is compiled as dynamic modules.
In static mode i added:

GST_PLUGIN_STATIC_DECLARE(rtsp);
GST_PLUGIN_STATIC_DECLARE(rtp);
GST_PLUGIN_STATIC_DECLARE(coreelements);
GST_PLUGIN_STATIC_DECLARE(videoparsersbad);

static void
registerGstStaticPlugins()
{
      GST_PLUGIN_STATIC_REGISTER(rtsp);
      GST_PLUGIN_STATIC_REGISTER(rtp);
     GST_PLUGIN_STATIC_REGISTER(coreelements);
     GST_PLUGIN_STATIC_REGISTER(videoparsersbad);
}

and linked it against corresponding .a files:

-lgstreamer-1.0 \
-l:/usr/local/lib/gstreamer-1.0/libgstrtsp.a \
-l:/usr/local/lib/libgstrtsp-1.0.a \
-l:/usr/local/lib/gstreamer-1.0/libgstrtp.a \
-l:/usr/local/lib/libgstsdp-1.0.a \
-l:/usr/local/lib/libgio-2.0.a \
-l:/usr/local/lib/libgstrtp-1.0.a \
-l:/usr/local/lib/libgstnet-1.0.a \
-l:/usr/local/lib/gstreamer-1.0/libgstcoreelements.a \
-l:/usr/local/lib/libgstbase-1.0.a \
-l:/usr/local/lib/libgstcodecparsers-1.0.a \
-l:/usr/local/lib/gstreamer-1.0/libgstvideoparsersbad.a \
-l:/usr/local/lib/libgstvideo-1.0.a \
-l:/usr/local/lib/libgstcodecparsers-1.0.a \
-l:/usr/local/lib/libgstbase-1.0.a \
-l:/usr/local/lib/gstreamer-1.0/libgstvideoparsersbad.a \
-l:/usr/local/lib/libgstpbutils-1.0.a \
-l:/usr/local/lib/libgsttag-1.0.a \
-l:/usr/local/lib/libgstvideo-1.0.a \
-l:/usr/local/lib/libgstaudio-1.0.a \

Compiled well. But after static compile of the same code (just adding
STATIC DECLARE and STATIC_REGISTER differs) - it wont work.

Wierd things happens. First is that if i switch RTSP source into UDP
transport mode - binary will fail with "cannot allocate udp port"'.
Switich to TCP mode will move forward but stuck soon at:

(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'on-npt-stop' is invalid for instance '0x96af800' of type 'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtp-decoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtcp-decoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtcp-encoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtp-decoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtcp-decoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtcp-encoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtp-decoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtcp-decoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:2462: signal
'request-rtcp-encoder' is invalid for instance '0x96af800' of type
'GstRTPDec'
(gst:4638): GLib-GObject-WARNING **: gsignal.c:3408: signal name
'reset-sync' is invalid for instance '0x96af800' of type 'GstRTPDec'
ERROR from element rtph264depay0: No RTP format was negotiated.
Debugging info: gstrtpbasedepayload.c(450): gst_rtp_base_depayload_chain
(): /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0:
Input buffers need to have RTP caps set on them. This is usually
achieved by setting the 'caps' property of the upstream source element
(often udpsrc or appsrc), or by putting a capsfilter element before the
depayloader and setting the 'caps' property on that. Also see
http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/gst/rtp/README

No matter what i do, i cannot pass it further. I tried also 1.4 branch
just to check - same happens.

Any clues?

As i said - if I recompile Gstreamer with dynami plugins - same code
works well.

Marcin




_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

marcin_wozniak.vcf (300 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: RTSP source pipeline not working in static mode

Sebastian Dröge-3
On Fr, 2016-06-24 at 17:32 +0200, Marcin Woźniak wrote:

> Hello and hi to all,
> I am fighting with latest 1.8 gstreamer tree to have a pipe to get
> RTSP 
> H264 stream and put it into a filesink.
> All works well when i compile 1.8 branch using dynamic linking (.so 
> modules). But as i need to move it further and crosscompile it to
> ARM 
> board - i need it to compile as a static executable.
> I studied this group, compiled gstreamer with --enable-static and 
> ---disable-registry and plugins trees with --enable-static-plugins.
> Then i created a small piece of code to test with:
> pipeline = gst_parse_launch ("rtspsrc location=rtsp://XXXXX/ 
> protocols=GST_RTSP_LOWER_TRANS_TCP ! rtph264depay ! fakesink", NULL);
> and ran it.
> And voila - it works well when all is compiled as dynamic modules.
> In static mode i added:
>
> GST_PLUGIN_STATIC_DECLARE(rtsp);
> GST_PLUGIN_STATIC_DECLARE(rtp);
> GST_PLUGIN_STATIC_DECLARE(coreelements);
> GST_PLUGIN_STATIC_DECLARE(videoparsersbad);
>
> static void
> registerGstStaticPlugins()
> {
>       GST_PLUGIN_STATIC_REGISTER(rtsp);
>       GST_PLUGIN_STATIC_REGISTER(rtp);
>      GST_PLUGIN_STATIC_REGISTER(coreelements);
>      GST_PLUGIN_STATIC_REGISTER(videoparsersbad);
> }
You need a lot of other plugins for this to work. At least rtpmanager,
udp and app are missing here, probably more, depending on how your
real, non-testing pipeline looks like.

--

Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: RTSP source pipeline not working in static mode

Marcin Woźniak
Hello,
Yes, that's true. Gstreamer didnt show in error log that needs additional plugins. Addig udp and rtpmanager works.
Problem is a very low performance on ARM board.
Marcin

W dniu 27.06.2016 o 09:34, Sebastian Dröge pisze:
On Fr, 2016-06-24 at 17:32 +0200, Marcin Woźniak wrote:
Hello and hi to all,
I am fighting with latest 1.8 gstreamer tree to have a pipe to get
RTSP 
H264 stream and put it into a filesink.
All works well when i compile 1.8 branch using dynamic linking (.so 
modules). But as i need to move it further and crosscompile it to
ARM 
board - i need it to compile as a static executable.
I studied this group, compiled gstreamer with --enable-static and 
---disable-registry and plugins trees with --enable-static-plugins.
Then i created a small piece of code to test with:
pipeline = gst_parse_launch ("rtspsrc location=rtsp://XXXXX/ 
protocols=GST_RTSP_LOWER_TRANS_TCP ! rtph264depay ! fakesink", NULL);
and ran it.
And voila - it works well when all is compiled as dynamic modules.
In static mode i added:

GST_PLUGIN_STATIC_DECLARE(rtsp);
GST_PLUGIN_STATIC_DECLARE(rtp);
GST_PLUGIN_STATIC_DECLARE(coreelements);
GST_PLUGIN_STATIC_DECLARE(videoparsersbad);

static void
registerGstStaticPlugins()
{
      GST_PLUGIN_STATIC_REGISTER(rtsp);
      GST_PLUGIN_STATIC_REGISTER(rtp);
     GST_PLUGIN_STATIC_REGISTER(coreelements);
     GST_PLUGIN_STATIC_REGISTER(videoparsersbad);
}
You need a lot of other plugins for this to work. At least rtpmanager,
udp and app are missing here, probably more, depending on how your
real, non-testing pipeline looks like.



_______________________________________________
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

marcin_wozniak.vcf (300 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: RTSP source pipeline not working in static mode

Sebastian Dröge-3
On Mo, 2016-06-27 at 09:47 +0200, Marcin Woźniak wrote:
> Hello,
> Yes, that's true. Gstreamer didnt show in error log that needs
> additional plugins. Addig udp and rtpmanager works.

It should appear in the debug logs though, and in theory rtspsrc should
report that as the actual error. Can you file a bug about improving the
error messages here?

> Problem is a very low performance on ARM board.

How is that related to static/dynamic linking or the missing plugins?

What do you exactly mean with low performance?

--

Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: RTSP source pipeline not working in static mode

Marcin Woźniak
Sebastian - this was just an informatin that i compiled with your help and it works. Now i need to check a profile a pipeline, because pipe with rtsp/depay/rtmpsink uses 100% ARM cpu on 1 Mbit stream.
Marcin

W dniu 27.06.2016 o 10:39, Sebastian Dröge pisze:
On Mo, 2016-06-27 at 09:47 +0200, Marcin Woźniak wrote:
Hello,
Yes, that's true. Gstreamer didnt show in error log that needs
additional plugins. Addig udp and rtpmanager works.
It should appear in the debug logs though, and in theory rtspsrc should
report that as the actual error. Can you file a bug about improving the
error messages here?

Problem is a very low performance on ARM board.
How is that related to static/dynamic linking or the missing plugins?

What do you exactly mean with low performance?



_______________________________________________
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

marcin_wozniak.vcf (300 bytes) Download Attachment