【问题标题】:Gstreamer examples in Android StudioAndroid Studio 中的 Gstreamer 示例
【发布时间】:2017-12-16 02:04:39
【问题描述】:

按照他们的教程,我一直在尝试让 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 Studio 在哪里可以找到我的 Android.mk 文件?

谢谢!

【问题讨论】:

  • 如果我的回答有帮助,请采纳。谢谢

标签: android android-ndk gstreamer ndk-build


【解决方案1】:

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

在 Android Studio 中使用库

了解 GStreamer 并将其集成到项目中的最佳方式是学习本网站中的教程: 对不起,你必须自己找到链接,我没有发布直接链接的声誉
然而,这些教程已经过时并且可以在 Eclipse 中使用,为了使用 Android Studio,需要:

1.使用 Android Studio 的 Import 选项导入教程;
2.设置Android Studio使用NDK;
3.在“Android.mk”文件中设置一个变量;
4.设置Gradle只编译部分架构;
5.将Gstreamer类复制到正确的路径。
6. 禁用 Android Studio 中的“即时运行”。 (编辑于 2017 年 10 月 27 日)
7. 修复“链接器黄金参数”(编辑于 2017 年 11 月 28 日仅限 WINDOWS 用户)

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

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

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

@987654323 @

2.将 Android Studio 设置为使用 NDK

现在项目已经导入,需要通知Android Studio该项目使用了NDK框架。因此,Gradle 将能够导入和处理所有依赖项。 为此,我们需要链接文件 Android.mk(已经在教程文件夹中):
1. 右击左侧导航栏的“应用”
2. 点击“Link C++ Project with Gradle”
3. 在新窗口中:

  • 将“构建系统”从“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. 浏览左侧选项卡并展开“外部构建文件”;
2.双击Android.mk打开文件;
3. 在第 10 行,在“include $(BUILD_SHARED_LIBRARY)”下,输入:
- “GSTREAMER_ROOT_ANDROID := 路径
- 引号
- path 是提取 GStreamer 的路径(显然)。
之后,Gradle 将同步并显示错误“***Target arch ABI not supported: mips.Stop”。


4.设置 Gradle 只编译一些架构

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


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

最后需要的配置是关于 Main 类中的包导入。


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

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

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

1. 在 Android Studio 中,转到“文件”->“设置...”(Ctrl+Alt+S)
2.“构建、执行、部署”->“即时运行”
3.取消选中“启用即时运行以在部署时热交换代码/资源更改(默认启用)”
4. 点击“应用”

7.修复“链接器黄金参数”(仅限 WINDOWS 用户)

在尝试 Windows 时,您会收到错误:
Error:error: invalid linker name in argument '-fuse-ld=gold'
修复它:
1. 前往Android NDK Linker (GStreamer) - invalid linker name -fuse-ld=gold
2. 按照 Antoine Zambelli 的回答说明进行操作。

【讨论】:

  • 这是使用 Android Studio 构建 gstreamer 教程的绝佳参考!希望它是官方文档的一部分。对于 Windows 上的 Android Studio,我必须为参数“-fuse-ld=gold”中的无效链接器名称应用[此修复][1]。由于链接器重定位溢出错误,我还不得不删除 armeabi 目标。 [1]:stackoverflow.com/questions/44650470/…
  • 感谢您的积极反馈,很高兴知道一步一步的工作是有效的,而且其他人也成功了。我编辑了教程,添加了教程是为 linux 制作的信息(可能你得到的错误是因为你在 Windows 上制作的),并提供了在尝试教程 2 和 3 时从过滤器中删除 armeabi 的信息。如果其他人会遇到你在 Windows 上遇到的同样问题我将添加另一个步骤,包括你用来解决问题的链接。
  • @EduardoFernando 很确定这通常是一个 Windows 问题 - 请参阅 GStreamer 中的“Windows 链接问题”,但他们在该页面上提供的解决方案对我不起作用(因此我对链接的问题)。
  • @AntoineZambelli 感谢您的反馈。最近我的一个朋友尝试在Windows上使用它,他也遇到了同样的问题,所以我将专门为Windows用户添加+1步骤教程
  • @CrearoRotar 简短的回答是:我不知道。如果我从 stackoverflow.com/questions/39589427/… 正确理解,当您选择 ndk-build 时,您正在使用文件“Android.mk”来链接和构建项目。所以我认为你应该寻找如何将“Android.mk”“翻译”为 CMake 文件。但我也不知道在“翻译”之后,教程中的所有步骤是否会继续工作。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多