笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述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”并点击“确定”。
文章图片
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。停止”。
文章图片
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版本可能需要删除更多架构,如果它不起作用尝试不同的删除组合)
文章图片
5.将Gstreamer类复制到正确的路径。
最后需要的配置是关于Main类中的包导入。
文章图片
上面显示的错误是因为没有GStreamer类来获取“.init”函数。要解决这个问题,我们需要从提取它的文件中复制GStreamer类并粘贴到指定的路径:
- 使用系统中的文件管理器浏览到解压缩GStreamer的文件。
- 从提取的文件中,浏览到GStreamer类的位置。它位于/arm/share/gst-android/ndk-build/GStreamer.java复制GStreamer.java
- 返回Android Studio并创建Main类尝试从左侧浏览器选项卡中的/ app / java开始访问的导入路径。因此,对于上图,我们必须创建路径org.freedesktop.gstreamer并将文件GStreamer.java粘贴到其中:
- 右键单击java Folder
- 新 - > 包
- 输入org.freedesktop.gstreamer
- 右键单击org.freedesktop.gstreamer并粘贴5.导入错误现在已解决,但新类有错误。要解决这些问题,您只需从复制的类中删除“@”以及位于“@”之间的所有内容。
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示例】经过几天的努力,我发现gstreamer教程文档已更新为使用gradle构建系统。您可以在https://cgit.freedesktop.org/gstreamer/gst-docs/中看到完整的工作示例,请参阅2018年6月14日的提交,“Android教程:添加gradle构建系统”
推荐阅读
- C ++读取内部Android NDK文件
- 使用OpenCV和Android NDK转换数据格式
- 错误(在Android ndk中使用C的冲突类型)
- Android java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader
- 使用__android_log_print打印Opencv Mat,Android NDK的内容
- Android JNI - 线程同步
- Facebook Buck(BUILD FAILED:没有检测到原生平台。可能没有正确配置Android NDK)
- 如何在JavaScript中从Twig安全地打印字符串变量
- 为Symfony 1.4中的异常实现自定义500错误页面