下载SDK及Demo包
SDK包 prebuilt binaries:https://gstreamer.freedesktop.org/data/pkg/android/
Demo 代码:https://gitlab.freedesktop.org/gstreamer/gst-docs/
解压,分别存放至路径:
D:\GitHub\extra\gst-docs-master
D:\GitHub\extra\gstreamer-1.0-android-universal-1.15.1
构建Demo应用并运行
开发工具相关版本信息如下
打开demo路径下的工程
在AS同步project之后,进行构建。
这里有个GStreamer SDK路径配置问题,需要在ndk-build的构建脚本中引入GSTREAMER_ROOT_ANDROID的值,这个值就是我们存放GStreamer SDK的路径。
有两种方式可以指定:
- 新建系统环境变量GSTREAMER_ROOT_ANDROID并设置其值。
- 按照ERROR提示,在gradle.properties中增加gstAndroidRoot变量。
这里我们使用方法2。由于Demo程序project中没有自带gradle.properties配置文件。我在project根路径下新建该配置文件并写入配置。
上述问题解决,继续构建,在ndk-build阶段遇到新问题:
找到GStreamer SDK路径下出现问题的构建脚本gstreamer-1.0.mk,路径为:
D:\GitHub\extra\gstreamer-1.0-android-universal-1.15.1\armv7\share\gst-android\ndk-build\gstreamer-1.0.mk
可以看到对应说明,新版Android NDK使用新的SYSROOT_INC和SYSROOT_LINK替换了以前的SYSROOT变量。然而,在新版NDK中SYSROOT_LINK定义任然是缺失的。查看一下SYSROOT_GST_LNIK的使用方式,是作为libtool-link调用的–sysroot参数使用,用于指定交叉编译环境下的系统根路径。所以,这里可以暂且使用SYSROOT_INC代替,修改如下:
这里需要注意一下,GStreamer SDK中ABI分为4个,在AS中进行ndk-build时,默认也是会构建这4个类型的ABI,所以4个对应的gstreamer-1.0.mk文件都需要进行修改。如果只需要构建指定的ABI,可以通过ndk-build的abiFilters参数进行配置,如下:
继续构建,即可成功完成。
在手机上运行Demo程序,效果图如下:
AS运行使用ndk-build构建出现问题时排查方法:
AS中打开Project结构视图,查看.externalNativeBuild中的相关文件可以获取到ndk-build的相关信息:
android_gradle_build.json 文件记录了ndk-build相关的所以信息,包含使用的构建脚本,需要构建的源文件,生成哪些库,ABI,交叉编译工具链等。
ndkBuild_build_command.txt 文件记录着AS要执行的ndk-build命令,记录执行ndk-build脚本时的完整参数列表,我们也可以在命令行手动执行这个命令来验证一些问题。
ndkBuild_build_output.txt 文件记录了ndk-build执行后的输出信息。