Android Studio中的Gstreamer示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio中的Gstreamer示例相关的知识,希望对你有一定的参考价值。

我一直试图让Gstreamer在android工作室工作,按照他们的教程,在这里查看:

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上工作,如果你有任何疑问,请问:)...我还将链接gitlab中的项目准备在Android Studio中运行: (教程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的导入选项导入教程; 2.将Android Studio设置为使用NDK; 3.在“Android.mk”文件中设置变量; 4.设置Gradle只编译一些架构; 5.将Gstreamer类复制到正确的路径。 6.从Android Studio禁用“Instante Run”。 (编辑10/27/2017) 7.修复“链接器黄金参数”(仅限WINDOWS用户编辑11/28/2017)

以下各节将解释这些说明中的每一条:

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

Android Studio可以选择从其他IDE导入项目。要将对Eclipse进行的Gstreamer项目导入以下步骤: 1.从git下载所有教程:; 2.在Android Studio中,转到文件 - >新导入项目; 3.在新的文件浏览器屏幕中,转到“gst-docs”,选择所需的项目(在我的案例教程5中)“android-tutorial-5”并点击“确定”。 Selecting Project 2.将Android Studio设置为使用NDK

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

  • 将“构建系统”从“CMake”更改为“ndk-build”
  • 单击“...”并浏览到Android.mk的位置“/AndroidStudioProjects/android-studio-5/app/src/jni/Android.mk”
  • 点击OK

现在,外部构建文件将出现在项目的左侧选项卡中。一些错误也会出现,这是正常的,将在下一节中予以纠正。

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” - 没有引号 - path是显然提取GStreamer的路径。 Gradle将同步后,将显示错误“***目标拱ABI不支持:mips。停止”。 Setting GSTREAMER_ROOT_ANDROID

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' (编辑11/21/2017:最近我遇到arm64-v8a的问题... 64位设备不显示直播,我解决了“删除arm64-v8a”的问题) (编辑3/29/2018:我意识到根据您的Gstreamer和NDK版本可能需要删除更多架构,如果它不起作用尝试不同的删除组合) enter image description here

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

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

上面显示的错误是因为没有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 Folder
  5. 新 - >包
  6. 输入org.freedesktop.gstreamer
  7. 右键单击org.freedesktop.gstreamer并粘贴5.导入错误现在已解决,但新类有错误。要解决这些问题,您只需从复制的类中删除“@”以及位于“@”之间的所有内容。

6.从Android Studio禁用“Instante Run”。 (编辑27/10/2017) Android Studio中的此功能可能会在尝试运行项目时出现问题,因此禁用它是一个好主意。 禁用“Instante Run”: 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的回答说明进行操作。

另一答案

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

以上是关于Android Studio中的Gstreamer示例的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 - Qt5 - Gstreamer:“您的计算机缺少 libgstreamer-0.10-0.dll”,即使我正确安装了 Gstreamer

使用 GStreamer 在 Android 上进行硬件视频解码

使用 gstreamer 在 android 手机中流式传输网络内容

使用 gstreamer 在 android 上录制音频(使用 Qt5)

使用 ANativeWindow_lock 返回错误 -22 与 android Gstreamer SDK

官方教程中的GStreamer示例不能使用GStreamer 1.14.1在Ubuntu 18.04上运行