gstreamer移植

参考

移植原因

开发中需要gstreamershm插件(共享内存),开发板中的没有这个插件,所以需要移植。

相关命令

  • file: 查看文件详细信息,例如是否是ARM平台程序。举例:file xxx.so
  • ldd: 查看依赖关系。举例:ldd xxx.so

注意事项

移植的过程比较曲折,资料也比较乱,趁还没忘记记录一下遇到的问题。能记多少记多少吧,下次遇到同样的问题少做点弯路。

  • 我主要是参照arm-linux交叉编译Gstreamer这篇文章的步骤来的。严格按照文章的顺序和版本来。版本很重要。版本很重要。版本很重要。初学者还是用一样的版本吧。
  • 我的交叉编译器:aarch64-buildroot-linux-gnu-gcc
  • 源码目录:/home/alientek/gstreamer/gst-build/
  • 安装目录:/home/alientek/gstreamer/prefix/
  • 导出交叉编译环境:export PATH=$PATH:/opt/atk-dlrk356x-toolchain/bin
  • gstreamer下载链接
  • 其他链接库下载 (如果打不开换个浏览器试试,下载很快的)

编译zlib

//shell命令
cd /home/alientek/gstreamer/gst-build/

tar xf zlib-1.2.11.tar.xz

CC=aarch64-buildroot-linux-gnu-gcc ./configure --prefix=/home/alientek/gstreamer/prefix --enable-shared

make -j16 //-j16会快很多
make install 

//卸载命令
make uninstall

//清除
make clean
make distclean //会删除Makefile文件,清除后需要重新./configure配置

编译libffi

没什么注意的,与参考文章步骤一致。根据自己的板子填写参数即可。

//下面两种情况拿不准可以试一下,没报错就行
CC=aarch64-buildroot-linux-gnu-gcc ./configure --prefix=/home/alientek/gstreamer/prefix --host=aarch64-buildroot-linux-gnu --enable-shared

./configure --prefix=/home/alientek/gstreamer/prefix CC=aarch64-buildroot-linux-gnu-gcc --host=aarch64-buildroot-linux-gnu --enable-shared

编译gettext

一致

编译glib

//我的配置命令
LIBFFI_CFLAGS='-I/home/alientek/gstreamer/prefix/lib/libffi-3.2.1/include' \
LIBFFI_LIBS='-lffi -L=/home/alientek/gstreamer/prefix/lib' \
ZLIB_CFLAGS='-I/home/alientek/gstreamer/prefix/include' \
ZLIB_LIBS='-lz -L/home/alientek/gstreamer/prefix/lib' \
./configure --host=aarch64-buildroot-linux-gnu --prefix=/home/alientek/gstreamer/prefix \
PKG_CONFIG_PATH=/home/alientek/gstreamer/prefix/lib/pkgconfig/ \
glib_cv_stack_grows=no glib_cv_uscore=yes \
ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes \
--with-pcre=internal --enable-libmount=no

编译orc

一致

编译x264

//我的配置命令
./configure --prefix=/home/alientek/gstreamer/prefix  \
--enable-shared --host=aarch64-buildroot-linux-gnu --disable-asm \
--cross-prefix=aarch64-buildroot-linux-gnu-

编译libxml

//我的配置命令
./configure --prefix=/home/alientek/gstreamer/prefix \
--enable-shared --host=aarch64-buildroot-linux-gnu \
CROSS_COMPILE=aarch64-buildroot-linux-gnu- --with-python=no \
Z_CFLAGS='-I/home/alientek/gstreamer/prefix/include' \
Z_LIBS='-lz -L/home/alientek/gstreamer/prefix/lib'

编译openssl

//我的配置命令
./config no-asm shared --prefix=/home/alientek/gstreamer/prefix \
CROSS_COMPILE=aarch64-buildroot-linux-gnu-

交叉编译Gstreamer

//我的配置命令
./configure --prefix=/home/alientek/gstreamer/prefix --host=aarch64-buildroot-linux-gnu \
LDFLAGS="-Wl,--unresolved-symbols=ignore-in-shared-libs -I/home/alientek/gstreamer/prefix/include" \
PKG_CONFIG_PATH=/home/alientek/gstreamer/prefix/lib/pkgconfig \
GIO_LIBS="-L/home/alientek/gstreamer/prefix/lib -lgio-2.0 -lgobject-2.0 -lglib-2.0" \
GLIB_LIBS="-L/home/alientek/gstreamer/prefix/lib -lglib-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0" \
--disable-loadsave --disable-gtk-doc --disable-valgrind \
ac_cv_func_register_printf_function=no 

交叉编译其他插件

  • 插件:gst-plugins-base、gst-plugins-good、gst-plugins-bad,gst-plugins-ugly-1.14.0.tar
  • 如果提示X11找不到的致命错误,到Makefile中将X11关闭。(base库编译的时候遇到了)
    在这里插入图片描述
//与编译gstreamer命令一样,我的配置命令
./configure --prefix=/home/alientek/gstreamer/prefix --host=aarch64-buildroot-linux-gnu \
LDFLAGS="-Wl,--unresolved-symbols=ignore-in-shared-libs -I/home/alientek/gstreamer/prefix/include" \
PKG_CONFIG_PATH=/home/alientek/gstreamer/prefix/lib/pkgconfig \
GIO_LIBS="-L/home/alientek/gstreamer/prefix/lib -lgio-2.0 -lgobject-2.0 -lglib-2.0" \
GLIB_LIBS="-L/home/alientek/gstreamer/prefix/lib -lglib-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0" \
--disable-loadsave --disable-gtk-doc --disable-valgrind \
ac_cv_func_register_printf_function=no 

移植到开发板

  • prefix/liblibgst前缀的文件都拷贝到开发板的/usr/lib,注意链接问题,建议压缩后复制。
  • prefix/lib/gstreamer-1.0文件夹中的文件都拷贝到开发板的/usr/lib/gstreamer-1.0

遇到的问题

  • 按照上面的步骤移植后, gst-inspect-1.0命令查看只有一个插件(默认就有一个插件,所以就是移植的所有插件都不识别)。搞了半天没搞定,怀疑是版本引起的(开发板原来的gstreamer版本是1.20.0,移植的版本是1.14.0)。
  • 试过的环境变量
//配置环境变量
export LD_LIBRARY_PATH=/usr/lib/:$LD_LIBRARY_PATH
export GST_PLUGIN_PATH_1_0=/usr/lib/gstreamer-1.0/

//出现了一个报错,之前报错也没有
(gst-inspect-1.0:1079): GStreamer-WARNING **: 08:13:44.024: External plugin loader failed. This most likely means that the plugin loader helper binary was not found or could not be run. You might need to set the GST_PLUGIN_SCANNER environment variable if your setup is unusual. This should normally not be required though.

//GST_PLUGIN_SCANNER环境变量
export GST_PLUGIN_SCANNER=/usr/libexec/gstreamer-1.0/gst-plugin-scanner

//删除黑名单后,gst-inspect-1.0能看到插件了,但是都在黑名单里
  • 最后没办法,只把需要的shmlibgstshm.so)插件复制到/usr/lib/gstreamer-1.0目录下。(不同版本竟然能用,说明流程没错
    在这里插入图片描述
  • 按照相同的方法复制libgstx264.so(ugly包中)被加入黑名单了。
  • 删除黑名单文件:rm /root/.cache/gstreamer-1.0/registry.aarch64.bin

总结

  • 流程都走完了,虽然不太顺利。
  • 中间遇到报错,有可能是ubuntu有些包没有安装,根据提示安装即可。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值