由于在嵌入式系统中运行gstreamer,受到资源的限制,所以打算只安装gstreamer核心库和一些必须的element,其它的element用到的时候再添加。我的想法是,把base,good,。。。插件包中的需要用到的elment编译成插件。
拿good插件包中的id3demux做试验(先在pc上试验,可惜pc上已经装了base插件包),把good插件包中的gst/id3demux目录下的5个文件copy到gst-template/gst-plugin/src目录下,用上一篇文章《编译自己的gstreamer插件》中提到的方法编译,郁闷,没通过,有空再研究一下(linux基本知识还很欠缺啊。。。)。
后来我想,既然gstreamer的插件是动态链接库,那么只是把这些源文件编译成动态链接库是否可以呢?试一下:
gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) -DPACKAGE='"GStreamer"' -Wimplicit -fpic -shared -g -o gstid3demux.so gstid3demux.c id3tags.c id3v2frames.c
把编译出来的gstid3demux.so拷贝到gstreamer库目录下,写个应用程序调用一下,OK,没问题。再用gst-template的工具生成一个myfilter,用同样的方法:
gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) -DPACKAGE='"GStreamer"' -DVERSION='"0.10.23"' -Wimplicit -fpic -shared -g -o gstmyfilter.so gstmyfilter.c
把编译出来的gstmyfilter.so拷贝到gstreamer库目录下,调用成功。
原来,只需要把你element编译成动态连接库就可以了。
原来对于有多个源文件的element,libtool需要对每个文件分别编译,以id3demux为例:
#libtool --mode=compile gcc `pkg-config --cflags gstreamer-0.10` -DPACKAGE='"GStreamer"' -DHAVE_USER_MTU -Wall -Wimplicit -g -c gstid3demux.c
#libtool --mode=compile gcc `pkg-config --cflags gstreamer-0.10` -DPACKAGE='"GStreamer"' -DHAVE_USER_MTU -Wall -Wimplicit -g -c id3tag.c
#libtool --mode=compile gcc `pkg-config --cflags gstreamer-0.10` -DPACKAGE='"GStreamer"' -DHAVE_USER_MTU -Wall -Wimplicit -g -c id3v2frame.c
然后再link:
#libtool --mode=link gcc -module -avoid-version -rpath /usr/local/lib/gstreamer-0.10/ -export-symbols-regex gst_plugin_desc -o gstid3demux.la gstid3demux.lo id3tag.lo id3v2frame.lo `pkg-config --libs gstreamer-0.10`
之后,再安装,搞定。