Gstreamer on Android(Qt C++)

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

Gstreamer on Android(Qt C++)

doon
I try to use some Gstreamer(1.8.0) plugins in my Qt C++ Android project, but I get a problems with a libraries.
First cpp code:
G_BEGIN_DECLS
GST_PLUGIN_STATIC_DECLARE(coreelements);
GST_PLUGIN_STATIC_DECLARE(soup);
 G_END_DECLS
void MainWindow::play(){
    GST_PLUGIN_STATIC_REGISTER(coreelements);
    GST_PLUGIN_STATIC_REGISTER(soup);
}

First error:
soup-session.c:631: error: undefined reference to 'g_simple_proxy_resolver_new'


Second cpp code:
G_BEGIN_DECLS
GST_PLUGIN_STATIC_DECLARE(coreelements);
GST_PLUGIN_STATIC_DECLARE(androidmedia);
 G_END_DECLS
void MainWindow::play(){
    GST_PLUGIN_STATIC_REGISTER(coreelements);
    GST_PLUGIN_STATIC_REGISTER(androidmedia);
}

Second error:
gstvideoencoder.c:284: error: undefined reference to 'gst_preset_get_type'


pro file:
#...
        LIBS += -L$$GST_ROOT/lib/gstreamer-1.0/static \
            -lgstvideo-1.0 \
            -lgstaudio-1.0 \
            -lgstcoreelements \
            -lgstudp \
            -lgstrtp \
            -lgstx264 \
            -lgstlibav \
            -lgstvideoparsersbad \
            -lgstvideotestsrc \
            -lgstplayback \
            -lgstaudiotestsrc \
            -lgstaudioconvert \
            -lgstvideoconvert \
            -lgstinterleave \
            -lgstautodetect \
            -lgstandroidmedia \
            -lgstphotography-1.0 \
            -lgstopengl \
            -lgstopenh264 -lgstogg -lgstfreeverb -lgstx264 -lgstopus -lgstequalizer -lgstencodebin -lgstlibav -lgstspeex -lgstvpx \
            -lGLESv2 -lEGL \
            -lgstfaad -lgstsouphttpsrc -lgsttheora -lgstlibvisual -lgstencodebin

        # Rest of GStreamer dependencies
        LIBS += -L$$GST_ROOT/lib \
            -lgstfft-1.0 -lm  \
            -lgstnet-1.0 -lgio-2.0 -lgstgl-1.0 \
            -lgstaudio-1.0 -lgstcodecparsers-1.0 -lgstbase-1.0 \
            -lgstreamer-1.0 -lgsttag-1.0 -lgstrtp-1.0 -lgstpbutils-1.0 \
            -lgstvideo-1.0 -lavformat -lavcodec -lavutil -lx264 \
            -lbz2 -lgobject-2.0 -lfaad -lsoup-2.4 -logg \
            -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -lorc-0.4 -liconv -lffi -lintl -lgstbase-1.0  -ldl -lgthread-2.0 -lxml2 -lgstbadbase-1.0

        LIBS += -L$$GST_ROOT/lib/gio/modules/static -lgnutls -lgnustl -lgiognutls
#...
How can I solve these errors?
Reply | Threaded
Open this post in threaded view
|

Re: Gstreamer on Android(Qt C++)

saepia
First of all, try using makefile scripts that come with GStreamer (see e.g. https://github.com/sdroege/gst-player) instead of trying to reinvent the wheel.

Secondly, using C++ with Android may be a bad choice, it's not well supported (http://developer.android.com/ndk/guides/cpp-support.html)

m.

2016-04-15 6:36 GMT-07:00 doon <[hidden email]>:
I try to use some Gstreamer(1.8.0) plugins in my Qt C++ Android project, but
I get a problems with a libraries.
First cpp code:
G_BEGIN_DECLS
GST_PLUGIN_STATIC_DECLARE(coreelements);
GST_PLUGIN_STATIC_DECLARE(soup);
 G_END_DECLS
void MainWindow::play(){
    GST_PLUGIN_STATIC_REGISTER(coreelements);
    GST_PLUGIN_STATIC_REGISTER(soup);
}

First error:
soup-session.c:631: error: undefined reference to
'g_simple_proxy_resolver_new'


Second cpp code:
G_BEGIN_DECLS
GST_PLUGIN_STATIC_DECLARE(coreelements);
GST_PLUGIN_STATIC_DECLARE(androidmedia);
 G_END_DECLS
void MainWindow::play(){
    GST_PLUGIN_STATIC_REGISTER(coreelements);
    GST_PLUGIN_STATIC_REGISTER(androidmedia);
}

Second error:
gstvideoencoder.c:284: error: undefined reference to 'gst_preset_get_type'


pro file:
#...
        LIBS += -L$$GST_ROOT/lib/gstreamer-1.0/static \
            -lgstvideo-1.0 \
            -lgstaudio-1.0 \
            -lgstcoreelements \
            -lgstudp \
            -lgstrtp \
            -lgstx264 \
            -lgstlibav \
            -lgstvideoparsersbad \
            -lgstvideotestsrc \
            -lgstplayback \
            -lgstaudiotestsrc \
            -lgstaudioconvert \
            -lgstvideoconvert \
            -lgstinterleave \
            -lgstautodetect \
            -lgstandroidmedia \
            -lgstphotography-1.0 \
            -lgstopengl \
            -lgstopenh264 -lgstogg -lgstfreeverb -lgstx264 -lgstopus
-lgstequalizer -lgstencodebin -lgstlibav -lgstspeex -lgstvpx \
            -lGLESv2 -lEGL \
            -lgstfaad -lgstsouphttpsrc -lgsttheora -lgstlibvisual
-lgstencodebin

        # Rest of GStreamer dependencies
        LIBS += -L$$GST_ROOT/lib \
            -lgstfft-1.0 -lm  \
            -lgstnet-1.0 -lgio-2.0 -lgstgl-1.0 \
            -lgstaudio-1.0 -lgstcodecparsers-1.0 -lgstbase-1.0 \
            -lgstreamer-1.0 -lgsttag-1.0 -lgstrtp-1.0 -lgstpbutils-1.0 \
            -lgstvideo-1.0 -lavformat -lavcodec -lavutil -lx264 \
            -lbz2 -lgobject-2.0 -lfaad -lsoup-2.4 -logg \
            -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -lorc-0.4
-liconv -lffi -lintl -lgstbase-1.0  -ldl -lgthread-2.0 -lxml2
-lgstbadbase-1.0

        LIBS += -L$$GST_ROOT/lib/gio/modules/static -lgnutls -lgnustl
-lgiognutls
#...
How can I solve these errors?



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/Gstreamer-on-Android-Qt-C-tp4676932.html
Sent from the GStreamer-devel mailing list archive at 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
Reply | Threaded
Open this post in threaded view
|

Re: Gstreamer on Android(Qt C++)

doon
saepia wrote
First of all, try using makefile scripts that come with GStreamer (see e.g.
https://github.com/sdroege/gst-player) instead of trying to reinvent the
wheel.

Secondly, using C++ with Android may be a bad choice, it's not well
supported (http://developer.android.com/ndk/guides/cpp-support.html)

m.

2016-04-15 6:36 GMT-07:00 doon <[hidden email]>:

> I try to use some Gstreamer(1.8.0) plugins in my Qt C++ Android project,
> but
> I get a problems with a libraries.
> First cpp code:
> G_BEGIN_DECLS
> GST_PLUGIN_STATIC_DECLARE(coreelements);
> GST_PLUGIN_STATIC_DECLARE(soup);
>  G_END_DECLS
> void MainWindow::play(){
>     GST_PLUGIN_STATIC_REGISTER(coreelements);
>     GST_PLUGIN_STATIC_REGISTER(soup);
> }
>
> First error:
> soup-session.c:631: error: undefined reference to
> 'g_simple_proxy_resolver_new'
>
>
> Second cpp code:
> G_BEGIN_DECLS
> GST_PLUGIN_STATIC_DECLARE(coreelements);
> GST_PLUGIN_STATIC_DECLARE(androidmedia);
>  G_END_DECLS
> void MainWindow::play(){
>     GST_PLUGIN_STATIC_REGISTER(coreelements);
>     GST_PLUGIN_STATIC_REGISTER(androidmedia);
> }
>
> Second error:
> gstvideoencoder.c:284: error: undefined reference to 'gst_preset_get_type'
>
>
> pro file:
> #...
>         LIBS += -L$$GST_ROOT/lib/gstreamer-1.0/static \
>             -lgstvideo-1.0 \
>             -lgstaudio-1.0 \
>             -lgstcoreelements \
>             -lgstudp \
>             -lgstrtp \
>             -lgstx264 \
>             -lgstlibav \
>             -lgstvideoparsersbad \
>             -lgstvideotestsrc \
>             -lgstplayback \
>             -lgstaudiotestsrc \
>             -lgstaudioconvert \
>             -lgstvideoconvert \
>             -lgstinterleave \
>             -lgstautodetect \
>             -lgstandroidmedia \
>             -lgstphotography-1.0 \
>             -lgstopengl \
>             -lgstopenh264 -lgstogg -lgstfreeverb -lgstx264 -lgstopus
> -lgstequalizer -lgstencodebin -lgstlibav -lgstspeex -lgstvpx \
>             -lGLESv2 -lEGL \
>             -lgstfaad -lgstsouphttpsrc -lgsttheora -lgstlibvisual
> -lgstencodebin
>
>         # Rest of GStreamer dependencies
>         LIBS += -L$$GST_ROOT/lib \
>             -lgstfft-1.0 -lm  \
>             -lgstnet-1.0 -lgio-2.0 -lgstgl-1.0 \
>             -lgstaudio-1.0 -lgstcodecparsers-1.0 -lgstbase-1.0 \
>             -lgstreamer-1.0 -lgsttag-1.0 -lgstrtp-1.0 -lgstpbutils-1.0 \
>             -lgstvideo-1.0 -lavformat -lavcodec -lavutil -lx264 \
>             -lbz2 -lgobject-2.0 -lfaad -lsoup-2.4 -logg \
>             -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0
> -lorc-0.4
> -liconv -lffi -lintl -lgstbase-1.0  -ldl -lgthread-2.0 -lxml2
> -lgstbadbase-1.0
>
>         LIBS += -L$$GST_ROOT/lib/gio/modules/static -lgnutls -lgnustl
> -lgiognutls
> #...
> How can I solve these errors?
>
>
>
> --
> View this message in context:
> http://gstreamer-devel.966125.n4.nabble.com/Gstreamer-on-Android-Qt-C-tp4676932.html
> Sent from the GStreamer-devel mailing list archive at 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
Hello!
Thanks, yes, I already saw these makefiles but they all uses gradle, but I don't know how can I use it with .pro. Anyway I found some solution: http://stackoverflow.com/a/36640385/2656632
But now I have another problem, I built my project, but have strange problem with the pads linking. Here is my code:
//...
pipeline = gst_parse_launch("souphttpsrc location=http://docs.gstreamer.com/media/sintel_trailer-368p.ogv ! oggdemux  ! vorbisdec  ! audioconvert ! openslessink", &error);
//...

This pipeline works fine on Ubuntu, problem occurs on Android.
If I use uri with ogv video(Theora) and audio(Vorbis) than I get this GST_DEBUG without audio playback(of course now I need only this, without Theora):
//...
  creating caps event audio/x-vorbis, rate=(int)48000, channels=(int)2, streamheader=(buffer)< 01766f72626973000000000280bb0000000000008038010000000000b801, 03766f726269731d000000586970682e4f7267206c6962566f726269732049203230303930373039010000001a000000454e434f4445523d66666d706567327468656f72612d302e323401, 05766f7262697321424356010000010018635429469952d24a8919739431469962924a89a5841642489d731453a939d79c6bacb9b52084101a5350290599528e526919639029059952104b492574123a279d63105b49c1d6986b8b41b61c840d9a524c29c494528a420819538c29c594524a420725740e3ae61c538e4a2841b89c73abb59696638ba974924ae724644c42482985924a07a5534e42483596d652291d7352526a41e820841042b620840d82d0905500000100c040101ab20a00500000108aa1188a028486ac020032000004a0288ee2288e233992634916101ab20a00000200100000c07014499114c9b1244bd22c4bd34451557dd5365555f6755dd7755dd7
  adding pad 'src_0a053d9b'
  trying delayed linking some pad of GstOggDemux named oggdemux0 to some pad of GstVorbisDec named vorbisdec0
  trying to link element oggdemux0:(any) to element vorbisdec0:(any)
  trying to link oggdemux0:src_38a00248 and vorbisdec0:sink
  Expected field 'channel-mask' in structure: audio/x-raw, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 }, channels=(int)[ 1, 2 ], layout=(string)interleaved;
  Could not find a compatible pad to link to oggdemux0:src_38a00248
  trying to link oggdemux0:src_0a053d9b and vorbisdec0:sink
  Expected field 'channel-mask' in structure: audio/x-raw, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 }, channels=(int)[ 1, 2 ], layout=(string)interleaved;
  found pad vorbisdec0:sink
  oggdemux0 and vorbisdec0 in same bin, no need for ghost pads
  trying to link oggdemux0:src_0a053d9b and vorbisdec0:sink
  Expected field 'channel-mask' in structure: audio/x-raw, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 }, channels=(int)[ 1, 2 ], layout=(string)interleaved;
  caps are incompatible
  link between oggdemux0:src_0a053d9b and vorbisdec0:sink failed: no common format
  trying to link oggdemux0:src_38a00248 and vorbisdec0:sink
  Expected field 'channel-mask' in structure: audio/x-raw, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 }, channels=(int)[ 1, 2 ], layout=(string)interleaved;
  trying to link oggdemux0:src_0a053d9b and vorbisdec0:sink
  Expected field 'channel-mask' in structure: audio/x-raw, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 }, channels=(int)[ 1, 2 ], layout=(string)interleaved;
  Expected field 'channel-mask' in structure: audio/x-raw, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 }, channels=(int)[ 1, 2 ], layout=(string)interleaved;
  no such pad 'src_%08x' in element "oggdemux0"
  Could not find a compatible pad to link to vorbisdec0:sink
  Could not link pads: oggdemux0:(null) - vorbisdec0:(null)
  warning: Delayed linking failed.
  warning: failed delayed linking some pad of GstOggDemux named oggdemux0 to some pad of GstVorbisDec named vorbisdec0
  posting message: Delayed linking failed.
  posted warning message: Delayed linking failed.
//...

But if I use uri with only audio(Vorbis) all works fine.
I also tried to use gst code for making pipeline and elements(instead of gst_parse_launch), it also works fine on Ubuntu(with audio and video) and on Android(with audio only). Android output:
//...
found pad demux:sink
  creating caps event video/x-theora, width=(int)854, height=(int)366, framerate=(fraction)24/1, pixel-aspect-ratio=(fraction)1/1, streamheader=(buffer)< 807468656f72610302010036001700035600016e0002000000180000000100000100000100000000c0c0, 817468656f72612b000000586970682e4f7267206c69627468656f726120312e312032303039303832322028546875736e656c64612900000000, 827468656f7261becd28f7b9cd6b18b5a9494a10739ce6318c5294a42108318c62108421084000000000000000000011f4e1642e5549b47612f570b4986b95a2a9409648a1d047d399b8d66430174b2552912c94462210078391c0d06431168b05628130944621100783a1c0c8602c1509848220f0683014fb9917d69555541412d2d19190504f0f0dcdcc8c8b4b4b4a0a0a08c8c8c787878786464646450505050503c3c3c3c3c3c3c28282828282828281414141414141402100b0a101828333d0c0c0e131a3a3c370e0d1018283945380e11161d3357503e1216253a446d674d182337405168715c31404e
  adding pad 'src_38a00248'
  found pad demux:sink
  creating caps event audio/x-vorbis, rate=(int)48000, channels=(int)2, streamheader=(buffer)< 01766f72626973000000000280bb0000000000008038010000000000b801, 03766f726269731d000000586970682e4f7267206c6962566f726269732049203230303930373039010000001a000000454e434f4445523d66666d706567327468656f72612d302e323401, 05766f7262697321424356010000010018635429469952d24a8919739431469962924a89a5841642489d731453a939d79c6bacb9b52084101a5350290599528e526919639029059952104b492574123a279d63105b49c1d6986b8b41b61c840d9a524c29c494528a420819538c29c594524a420725740e3ae61c538e4a2841b89c73abb59696638ba974924ae724644c42482985924a07a5534e42483596d652291d7352526a41e820841042b620840d82d0905500000100c040101ab20a00500000108aa1188a028486ac020032000004a0288ee2288e233992634916101ab20a00000200100000c07014499114c9b1244bd22c4bd34451557dd5365555f6755dd7755dd7
  adding pad 'src_0a053d9b'
  found pad dec:sink
  trying to link demux:src_0a053d9b and dec:sink
  Expected field 'channel-mask' in structure: audio/x-raw, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 }, channels=(int)[ 1, 2 ], layout=(string)interleaved;
  caps are incompatible
  link between demux:src_0a053d9b and dec:sink failed: no common format
//...

What is the problem?
Reply | Threaded
Open this post in threaded view
|

Re: Gstreamer on Android(Qt C++)

doon
In reply to this post by saepia
saepia wrote
First of all, try using makefile scripts that come with GStreamer (see e.g.
https://github.com/sdroege/gst-player) instead of trying to reinvent the
wheel.

Secondly, using C++ with Android may be a bad choice, it's not well
supported (http://developer.android.com/ndk/guides/cpp-support.html)

m.

2016-04-15 6:36 GMT-07:00 doon <[hidden email]>:

> I try to use some Gstreamer(1.8.0) plugins in my Qt C++ Android project,
> but
> I get a problems with a libraries.
> First cpp code:
> G_BEGIN_DECLS
> GST_PLUGIN_STATIC_DECLARE(coreelements);
> GST_PLUGIN_STATIC_DECLARE(soup);
>  G_END_DECLS
> void MainWindow::play(){
>     GST_PLUGIN_STATIC_REGISTER(coreelements);
>     GST_PLUGIN_STATIC_REGISTER(soup);
> }
>
> First error:
> soup-session.c:631: error: undefined reference to
> 'g_simple_proxy_resolver_new'
>
>
> Second cpp code:
> G_BEGIN_DECLS
> GST_PLUGIN_STATIC_DECLARE(coreelements);
> GST_PLUGIN_STATIC_DECLARE(androidmedia);
>  G_END_DECLS
> void MainWindow::play(){
>     GST_PLUGIN_STATIC_REGISTER(coreelements);
>     GST_PLUGIN_STATIC_REGISTER(androidmedia);
> }
>
> Second error:
> gstvideoencoder.c:284: error: undefined reference to 'gst_preset_get_type'
>
>
> pro file:
> #...
>         LIBS += -L$$GST_ROOT/lib/gstreamer-1.0/static \
>             -lgstvideo-1.0 \
>             -lgstaudio-1.0 \
>             -lgstcoreelements \
>             -lgstudp \
>             -lgstrtp \
>             -lgstx264 \
>             -lgstlibav \
>             -lgstvideoparsersbad \
>             -lgstvideotestsrc \
>             -lgstplayback \
>             -lgstaudiotestsrc \
>             -lgstaudioconvert \
>             -lgstvideoconvert \
>             -lgstinterleave \
>             -lgstautodetect \
>             -lgstandroidmedia \
>             -lgstphotography-1.0 \
>             -lgstopengl \
>             -lgstopenh264 -lgstogg -lgstfreeverb -lgstx264 -lgstopus
> -lgstequalizer -lgstencodebin -lgstlibav -lgstspeex -lgstvpx \
>             -lGLESv2 -lEGL \
>             -lgstfaad -lgstsouphttpsrc -lgsttheora -lgstlibvisual
> -lgstencodebin
>
>         # Rest of GStreamer dependencies
>         LIBS += -L$$GST_ROOT/lib \
>             -lgstfft-1.0 -lm  \
>             -lgstnet-1.0 -lgio-2.0 -lgstgl-1.0 \
>             -lgstaudio-1.0 -lgstcodecparsers-1.0 -lgstbase-1.0 \
>             -lgstreamer-1.0 -lgsttag-1.0 -lgstrtp-1.0 -lgstpbutils-1.0 \
>             -lgstvideo-1.0 -lavformat -lavcodec -lavutil -lx264 \
>             -lbz2 -lgobject-2.0 -lfaad -lsoup-2.4 -logg \
>             -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0
> -lorc-0.4
> -liconv -lffi -lintl -lgstbase-1.0  -ldl -lgthread-2.0 -lxml2
> -lgstbadbase-1.0
>
>         LIBS += -L$$GST_ROOT/lib/gio/modules/static -lgnutls -lgnustl
> -lgiognutls
> #...
> How can I solve these errors?
>
>
>
> --
> View this message in context:
> http://gstreamer-devel.966125.n4.nabble.com/Gstreamer-on-Android-Qt-C-tp4676932.html
> Sent from the GStreamer-devel mailing list archive at 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
Bump. I still don't know what the problem.