Android Studio 中的 Gstreamer 示例

Gstreamer examples in Android Studio

我一直在尝试让 Gstreamer 在 Android studio 中工作,遵循他们的教程,例如在这里查看:

https://gstreamer.freedesktop.org/documentation/tutorials/android/link-against-gstreamer.html

但是在最新的Android工作室中没有jni/Android.mk。该网页末尾的代码放在哪里?

它应该放在 CMakeLists.txt 中吗?还是应该放一些不同的东西?

或者我只制作一个 Android.mk 文件,如果是,在哪里(因为没有 jni 文件夹,只有一个 cpp 文件夹)?我如何告诉 Android 工作室在哪里可以找到我的 Android.mk 文件?

谢谢!

我已经完成了 Gstreamer 网站上的所有教程,但是非常困难。为了帮助其他人,我记录了它。这是 linux (ubuntu) 的教程,但也可能适用于 windows,如果您对此有任何疑问,请提问 :)。 .. 我还将 link git 实验室的一个项目准备好在 Android 工作室中 运行:
(教程 5) https://gitlab.com/eduardoprado/gstreamer-tutorial5.git
(tutorial 2) https://gitlab.com/eduardoprado/gstreamer-tutorial2.git

在 Android Studio

使用库

了解 GStreamer 并将其集成到项目中的最佳方式是学习本网站中的教程: 抱歉,您必须自己找到 link,我没有 post 直接 link
的声誉 然而,这些教程是旧的,并且是在 Eclipse 中工作的,为了与 Android 一起工作,Studio 是必要的:

1.使用 Android Studio 的导入选项导入教程;
2. 设置 Android Studio 使用 NDK;
3. 在“Android.mk”文件中设置一个变量;
4.设置Gradle只编译部分架构;
5. 复制Gstreamer class到正确路径
6. 从 Android Studio 禁用 "Instante Run"。 (编辑于 2017 年 10 月 27 日制作)
7. 修复 "linker gold argument"(编辑于 2017 年 11 月 28 日 WINDOWS 用户)

这些指令中的每一个都将在以下部分中进行解释:

1.使用 Android Studio 的导入选项导入教程

Android Studio 可以选择从其他 IDE 导入项目。将制作的Gstreamer工程导入Eclipse的步骤如下:
1. 从 git 下载所有教程:;
2. 在 Android Studio 中转到文件 -> 新建导入项目;
3. 在文件屏幕的新浏览器中,转到 "gst-docs"、select 所需的项目(在我的案例教程 5 中)"android-tutorial-5" 并点击 "OK"。



2。将 Android Studio 设置为使用 NDK

现在项目已经导入,需要通知AndroidStudio项目使用NDK框架。因此 Gradle 将能够导入和处理所有依赖项。 为此,我们需要 link 文件 Android.mk(已在教程文件夹中):
1. 右键点击左侧导航标签中的“app”
2. 点击 "Link C++ Project with Gradle"
3.在新的window:

  • 将 "Build System" 从 "CMake" 更改为 "ndk-build"
  • 单击“...”并浏览到 Android.mk 的位置“/AndroidStudioProjects/android-studio-5/app/src/jni/Android.mk”
  • 点击确定

现在外部构建文件将出现在项目的左侧选项卡中。也会出现一些错误,属于正常现象,下节会更正。

3。在“Android.mk”文件中设置一个变量

发生最后一节错误是因为“Android.mk”找不到提取 GStreamer 的路径。因此,让我们将 GSTREAMER_ROOT_ANDROID 变量设置为提取 GStreamer 的路径。 为此:
1. 浏览左侧选项卡并展开 "External Build FIles";
2. 双击Android.mk打开文件;
3. 在第 10 行的 "include $(BUILD_SHARED_LIBRARY)" 下,键入:
- "GSTREAMER_ROOT_ANDROID := path"
- NO 引号
- 路径是提取 GStreamer 的路径(显然)。
之后 Gradle 将同步并显示错误“***Target arch ABI not supported: mips.Stop”。


4。设置Gradle只编译部分架构

发生最后一节错误是因为 Grade 尝试为不同的体系结构构建但它没有找到要在 MIPS 中构建的文件。为了解决这个问题,我们将指定要构建的架构,不包括 MIPS:
1. 在左侧浏览器选项卡中,展开 Gradle Scripts;
2. 双击 "build.gradle (Module: app)"
3. 在 "moduleName" 下的行中键入:
(到 运行 教程 5)
-abiFilters 'x86'、'armeabi'、'armeabi-v7a'、'arm64-v8a'
(至运行教程2)
-abiFilters 'x86'、'armeabi-v7a'、'arm64-v8a'
(2017 年 11 月 21 日编辑:最近我遇到了 arm64-v8a 问题...64 位设备无法显示直播,我也解决了 "removing arm64-v8a")
(编辑 3/29/2018:我意识到可能需要根据您的 Gstreamer 和 NDK 版本删除更多架构,如果它不起作用请尝试不同的删除组合)


5.将 Gstreamer class 复制到正确的路径。

最后需要的配置与 Main 中的包导入有关 class。


出现上面的错误是因为没有GStreamer class获取“.init”函数。为了解决这个问题,我们需要从提取它的文件中复制 class GStreamer 并粘贴到指定路径:

  1. 使用系统中的文件管理器浏览到您提取 GStreamer 的文件。
  2. 从提取的文件中,浏览到 GStreamer class 的位置。它位于 /arm/share/gst-android/ndk-build/GStreamer.java 复制GStreamer.java
  3. 返回 Android Studio 并创建 Main class 试图从左侧浏览器选项卡中的 /app/java 开始访问的导入路径。因此,对于上图,我们必须创建路径 org.freedesktop.gstreamer 并将文件 GStreamer.java 粘贴到其中:
  4. 右键单击 java 文件夹
  5. 新建-> 包
  6. 类型org.freedesktop.gstreamer
  7. 右键单击 org.freedesktop.gstreamer 并粘贴 5.The输入错误现已解决,但新的class有错误。要解决它们,您所要做的就是从复制的 class 中删除“@”以及位于“@”之间的所有内容。

6.从 Android Studio 禁用 "Instante Run"。 (编辑于 27/10/2017)
Android Studio 中的此功能在尝试 运行 项目时可能会导致问题,因此最好禁用它。
禁用 "Instante Run":

1. 在 Android Studio 转到 "File" -> "Settings..." (Ctrl+Alt+S)
2. "Build, Execution, Deployment" -> "Instant Run"
3. 取消勾选 "Enable Instant Run to hot swap code/resource changes on deploy (default enabled)"
4.点击"Apply"

7.修复 "linker gold argument"(仅限 WINDOWS 用户)

尝试 Windows 时,您将收到错误消息:
Error:error: invalid linker name in argument '-fuse-ld=gold'
要修复它:
1. 转到
2. 按照 Antoine Zambelli 的 回答说明进行操作。

经过几天的挣扎,我发现 gstreamer 教程文档已更新为使用 gradle 构建系统。您可以在 https://cgit.freedesktop.org/gstreamer/gst-docs/ 中查看完整的工作示例,参见 2018 年 6 月 14 日的提交,'Android tutorials: add gradle build system'