编译gstreamer for android

1.下载cerbero工程

编译gstreamer可不是件容易事,一个是gst依赖了太多其他库,再一个是gst本身就有很多插件,这些插件分散在不同的工程里,相对来说ffmpeg就显得简单易用了不少,奈何项目里要用到gst,那就只能搞咯,幸运的是,github上有个开源项目,专为gst的交叉编译量身打造的,那就是cerbero项目。它只做两件事情,一个是配置编译环境,另一个是编译打包gst全部的相关工程,先从github上把它下下来

git clone https://github.com/GStreamer/cerbero.git

2.切换版本

刚下下来的cerbero工程默认编译最新的gst版本,如果你的项目需要其他的gst版本,那么直接切换cerbero的版本即可。

在这里插入图片描述
在这里插入图片描述

查看一下gst已经切换到对应的分支

在这里插入图片描述

3.配置编译环境

config目录下有不同平台的配置文件,根据需要选择对应的配置文件,然后执行命令

./cerbero-uninstalled -c config/cross-android-armv7.cbc bootstrap

这个命令会自动下载编译gst所需的依赖库,但事情往往没有这么简单,命令执行过程中总会出现一些问题,幸运的是大部分都是下载出错的,需要按出错提示逐个解决就行了

在这里插入图片描述

像上面这种纯粹就是下载超时了,本人的做法是直接手动执行它的下载命令,并把timeout改成20,然后就能下载下来了,再从新执行bootsrap

当出现如下错误
错误: 无法验证 xxx 的由 “/C=US/O=Let’s Encrypt/CN=R3” 颁发的证书:
颁发的证书已经过期。 要以不安全的方式连接至 xxx,使用“–no-check-certificate”。

每次都增加–no-check-certificate选项太麻烦了,尝试执行以下命令: yum install -y
ca-certificates

4.编译gst

当编译环境安装好之后,就可以编译gst了,执行以下命令

./cerbero-uninstalled -c config/cross-android-armv7.cbc package gstreamer-1.0

命令同样会自动下载gst的源码,也同样会出现一些奇怪的错误,需要根据具体错误提示解决,然后重新执行打包命令

在这里插入图片描述

像上面的错误,cerbero用python3写的,而本人的python环境没有six这个模块,需要自己安装,这个问度娘就行

在这里插入图片描述

还有这种cheksum errro的,感觉是下载的源有问题,本人也是没办法,只能重试几次,然后居然就好了。后来发现对应组件的recipe文件里写死了对应的checksum,更新一下新的checksum就可以了

在这里插入图片描述

然后还有git fetch error的,这种一般是git的缓存不够引起的,解决方法是cd到对应的下载目录,执行git config
http.postBuffer 524288000,把缓冲加大到500M,再不行就加大到1G,然后手动执行git fetch --all
顺利编译通过后,可以看到cerbero工程目录里生成了两个包

在这里插入图片描述

5.打包gstream_android.so

解压编译生成的tar包(不带runtime那个),把解压后的路径导出到环境变量

export GSTREAMER_ROOT_ANDROID=你的解压目录

下载NDK,在NDK目录下新建jni目录,然后在jni目录里新建Application.mk和Andriod.mk文件,Android.mk将决定so库包含哪些编解码器插件,这里就不给出来了,可以这篇文章:添加链接描述

在这里插入图片描述

在NDK目录下,执行./ndk-build,打包so,如无意外,可以发现so静静地躺在了libs目录中

在这里插入图片描述

Tips

cerbero每次编译都会下载新的代码,如果想要修改源码做一些diy怎么办,只要修改cerbero/build/recipe.py这个脚本

在这里插入图片描述

把fetch和extract注释掉,这样编译时就不会下载代码了(下载解压后的源码在cerbero/build/sources/目录里)

执行以下命令可以只编译某个模块(需要注意的是:如果修改了某个模块的代码,需要重新编译一下该模块,再执行步骤4的编译gst命令,否则修改是不生效的)

./cerbero-uninstalled -c config/cross-android-armv7.cbc buildone gst-plugins-bad-1.0

如果想修改某个模块的编译选项,则修改recipe目录下对应的.recipe文件即可

如果修改了某个文件,如何知道生成的.a/.la文件是哪个呢,只需要查看该目录下的makefile.am即可
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值