GStreamer安装——Android

Android安装

支持所有从2.3.1Gingerbread开始的版本

先决条件

开发机器是您开发Android应用程序的地方,然后您将其部署在目标机器上,目标机器显然应该是Android设备。

开发机器可以是Linux、Mac OS X或Windows,并且需要安装:

  • 最新版本的Android SDK
  • 正确版本的安卓NDK对应的版本 GStreamer二进制文件使用(f. ex.,r18b1.16.x)
  • GStreamer for Android针对的是API版本9(Android2.3.1,Gingerba)或更高版本。使用SDK管理器工具确保您至少安装了一个API版本9或更高版本的Android SDK平台。

在继续之前,请确保您可以编译和运行示例 包含在Android NDK中,并且您了解如何集成 C和Java通过Java本机接口(JNI)工作。除了 Android NDK留档,你可以找到一些有用的Android JNI提示在这里。

下载并安装GStreamer二进制文件

GStreamer项目提供了您应该下载的预构建二进制文件 最新版本并将其解压缩到您选择的任何文件夹中。

在构建支持GStreamer的Android应用程序的过程中, 一些工具需要知道您将GStreamer安装在哪里 二进制文件。您必须定义一个名为 GSTREAMER_ROOT_ANDROID并将其指向您所在的文件夹 提取了GStreamer二进制文件。此环境变量必须在 构建时间,所以也许你想让它在系统范围内可用 将其添加到您的~/.profile文件(在Linux和Mac上)或 系统属性对话框中的环境变量(在Windows上)。

GSTREAMER_ROOT_ANDROID指向解压缩二进制文件的文件夹。

如果你打算使用Android Studio,不想定义这个 全局环境变量,您可以在build. gradle中设置它。

如果您计划使用Eclipse,并且不想定义它 全局环境变量,您可以在Eclipse中设置它。去 窗口→首选项→C/C++→构建→构建变量并定义 GSTREAMER_ROOT_ANDROID那里。

使用的Gradle构建系统中的NDK支持 Android Studio仍处于测试阶段,因此推荐的构建方式 使用GStreamer SDK仍然是使用“ndk-build”。

配置您的开发环境

在Android应用程序中使用GStreamer有两种途径:用Java或C编写GStreamer代码。

Android应用程序主要用Java编写,所以添加GStreamer 用相同的语言向他们编码是一个巨大的优势。然而,这 需要为GStreamer API使用语言绑定,而不是 完成了。与此同时,这个留档将使用Java GStreamer代码的用户界面(UI)部分和C。两部分 通过JNI互动。

构建教程

教程代码在 GST-docs在 examples/tutorials/文件夹。

有几个Android特定的教程在tutorials/ 文件夹。每个教程都是一个包含源代码的文件夹(Java和 C)以及构建完整Android所需的资源文件 应用。

其余GStreamer教程(基本和播放教程)未经修改无法在Android上运行。

支持GStreamer的Android项目像传统的一样构建 安卓NDK项目,所以在安卓NDK家的说明可以 被遵循:

使用Eclipse

确保您已安装先决条件部分中列出的ADT和NDK插件,并且它们都知道Android SDK和NDK的位置。

将教程导入Eclipse工作区: 文件→新建→项目…→现有代码中的Android项目,然后选择 文件夹名为android-tutorial-1

在项目中读取并生成一些额外的文件和文件夹后,Eclipse可能会抱怨缺少文件。这很正常,我们还没有完成。

通过激活NDK插件提供原生开发支持: 右键单击Project Explorer中的项目(这应该是 最上面的文件夹, 称为com.gst_sdk_tutorials.tutorial_1.Tutorial1)→Android 工具→添加本机支持…这里NDK插件要求提供库名称。 这无关紧要,任何有效的文件名都可以。接受。

Eclipse仍然会抱怨代码中的错误。这很正常。有些文件丢失了,因为它们是在第一次构建运行期间生成的。

构建项目:项目→构建项目。如果您打开Eclipse控制台,您应该会看到一些进度消息。完成后,将出现缺失的文件,所有错误消息都应该消失了。项目现在可以运行了。点击运行→运行。

您的设备上现在应该可以使用名为“Android教程1”的新应用程序,并带有GStreamer徽标。如果您想在Android虚拟设备(AVD)中运行本教程,请确保创建支持音频播放和GPU仿真的设备(以启用OpenGL ES)。

使用命令行

请注意,在Windows上,此过程需要一个工作的Cygwin 外壳,如Android NDK系统要求

对于每个教程,移动到其文件夹并运行:

android update project -p . -s --target X

其中X是系统中可用的目标之一 与SDK管理器一起安装)。确保使用至少具有 API级别9。

要获取系统中所有可用目标的列表,请发出以下命令:

android list

"update project"命令生成build.xml文件 构建系统。您只需要每个项目执行一次此操作。

要构建C部分,只需调用:

ndk-build

Android.mk文件中的几行(稍后回顾)拉起 编译GStreamer位并生成 Java代码可以作为本机使用的共享对象库(. so) 方法。

最后,编译Java代码:

ant debug

并在设备上安装:

adb install -r bin/Tutorial1-debug.apk

通过-r开关,安装程序可以覆盖以前的版本。 否则,您需要手动卸载以前版本的 应用。

您的设备上现在应该可以使用名为“Android教程1”的新应用程序,并带有GStreamer徽标。如果您想在Android虚拟设备(AVD)中运行本教程,请确保创建支持音频播放和GPU仿真的设备(以启用OpenGL ES)。

Windows链接问题

由于与标准链接器相关的问题,Google的 Gold Linker用于构建GStreamer应用程序。不幸的是, 适用于Windows的Android NDK工具链不包括金链接器 必须使用标准的。

如果您观察到链接问题,您可以更换您的链接器 安卓NDK与这个项目中的金色。下载 android-ndk-r8b-ma-windows.7z文件,提取 \android-ndk-r8b\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\arm-linux-androideabi\bin\ld.exe (只需要此文件)并覆盖同一文件夹中的文件 您的Android NDK安装。您可能需要免费的7-Zip存档实用程序

从命令行使用gradle

编辑示例/教程/android/gradle.properties以设置gstAndroidRoot以指向未打包的GStreamer Android二进制文件。

然后,要构建教程并将其部署到您的设备,请使用类似于以下命令的命令:

$ cd examples/tutorials/android
$ PATH=~/dev/android/tools/bin:~/dev/android/ndk-bundle:$PATH ANDROID_HOME="$HOME/dev/android/" ./gradlew installDebug

要构建和部署单个教程:

$ cd examples/tutorials/android
$ GSTREAMER_ROOT_ANDROID=/path/to/gst-android-1.14/ PATH=~/dev/android/tools/bin:~/dev/android/ndk-bundle:$PATH ANDROID_HOME="$HOME/dev/android/" ./gradlew :android-tutorial-1:installDebug

要运行应用程序,您可以直接从设备或命令行启动它:

$ adb shell am start -n adb shell am start -n org.freedesktop.gstreamer.tutorials.tutorial_1/.Tutorial1

要在运行时查看GStreamer日志:

$ adb logcat | egrep '(gst)'
使用Android工作室

编辑示例/教程/android/gradle.properties以设置gstAndroidRoot以指向未打包的GStreamer Android二进制文件。

启动Android工作室,打开示例/教程/android/作为一个项目。

该项目应该自动构建,一旦成功完成,应该可以运行运行>运行“教程X”的教程,前提是连接了设备并启用了USB调试。

日志可以在logcat选项卡中看到。

创建新项目

创建一个普通的NDK项目,如所述从命令行 在Android NDK主页,或使用Eclipse: File→New→Project… →Android应用程序项目,并且,一旦向导完成,对 单击项目→Android工具→添加原生支持…

要添加GStreamer支持,您只需修改 jni/Android.mk文件。此文件描述了您的 项目,及其准系统结构(由Eclipse自动生成)是:

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := NativeApplication
LOCAL_SRC_FILES := NativeApplication.c

include $(BUILD_SHARED_LIBRARY)

其中第5行指定.so文件的名称,该文件将包含您的 本机代码和第6行说明构成本机的所有源文件 代码,以空格分隔。

添加GStreamer支持只需要添加以下行:

Android.mkGStreamer支持

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := NativeApplication
LOCAL_SRC_FILES := NativeApplication.c
LOCAL_SHARED_LIBRARIES := gstreamer_android
LOCAL_LDLIBS := -landroid

include $(BUILD_SHARED_LIBRARY)

ifndef GSTREAMER_ROOT
ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif
GSTREAMER_ROOT            := $(GSTREAMER_ROOT_ANDROID)
endif

GSTREAMER_NDK_BUILD_PATH  := $(GSTREAMER_ROOT)/share/gst-android/ndk-build/
GSTREAMER_PLUGINS         := coreelements ogg theora vorbis videoconvert audioconvert audioresample playback glimagesink soup opensles
G_IO_MODULES              := gnutls
GSTREAMER_EXTRA_DEPS      := gstreamer-video-1.0

include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer.mk

其中第7行指定要包含在项目中的额外库: libgstreamer_android.so.此库包含所有GStreamer代码, 为您的应用程序需求量身定制,如下所示。

在这种情况下,第8行指定了其他系统库,以便访问android特定的功能。

第12行和第13行简单地定义了一些方便的宏。

第20行列出了您想要静态链接到的插件 libgstreamer_android.so.只列出您需要的商品 应用程序更小。

第21行需要从GStreamer获得HTTPS/TLS支持,通过 souphttpsrc元素。

第22行定义了您的应用程序需要哪些GStreamer库。

最后,第24行包括执行其余魔术的make文件。

列出所有所需的插件可能很麻烦,因此它们已被分组 分类,可以通过包含plugins.mk文件来使用, 并使用如下:

include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk
GSTREAMER_PLUGINS  := $(GSTREAMER_PLUGINS_CORE) $(GSTREAMER_PLUGINS_CODECS) playbin souphttpsrc
类别和包含的插件列表
CategoryIncluded plugins
GSTREAMER_PLUGINS_COREcoreelements adder app audioconvert audiorate audioresample audiotestsrc gio pango typefindfunctions videoconvert videorate videoscale videotestsrc volume autodetect videofilter
GSTREAMER_PLUGINS_PLAYBACKplayback
GSTREAMER_PLUGINS_VISlibvisual goom goom2k1 audiovisualizers
GSTREAMER_PLUGINS_EFFECTSalpha alphacolor audiofx cairo cutter debug deinterlace dtmf effectv equalizer gdkpixbuf imagefreeze interleave level multifile replaygain shapewipe smpte spectrum videobox videocrop videomixer accurip aiff audiofxbad autoconvert bayer coloreffects debugutilsbad fieldanalysis freeverb frei0r gaudieffects geometrictransform inter interlace ivtc rawparse removesilence segmentclip smooth speed soundtouch videofiltersbad audiomixer compositor webrtcdsp
GSTREAMER_PLUGINS_NETtcp rtsp rtp rtpmanager soup udp dataurisrc sdp srtp rtspclientsink
GSTREAMER_PLUGINS_NET_RESTRICTEDrtmp
GSTREAMER_PLUGINS_CODECSsubparse ogg theora vorbis opus alaw apetag audioparsers auparse avi dv flac flv flxdec icydemux id3demux isomp4 jpeg matroska mulaw multipart png speex taglib vpx wavenc wavpack wavparse y4menc adpcmdec adpcmenc dashdemux dvbsuboverlay dvdspu hls id3tag kate midi mxf openh264 opusparse pcapparse pnm rfbsrc schro gstsiren smoothstreaming subenc videoparsersbad y4mdec jpegformat gdp rsvg openjpeg spandsp sbc androidmedia
GSTREAMER_PLUGINS_CODECS_GPLassrender
GSTREAMER_PLUGINS_CODECS_RESTRICTEDasfmux dtsdec faad mpegpsdemux mpegpsmux mpegtsdemux mpegtsmux voaacenc a52dec amrnb amrwbdec asf dvdsub dvdlpcmdec mad mpeg2dec xingmux realmedia x264 lame mpg123 libav
GSTREAMER_PLUGINS_SYSopensles opengl
GSTREAMER_PLUGINS_CAPTUREcamerabin
GSTREAMER_PLUGINS_ENCODINGencodebin
GSTREAMER_PLUGINS_GESnle

构建并运行您的应用程序,如构建教程部分所述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/703154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

私有云数据库特征

私有云数据库具有以下几个主要特征: 控制和安全: 数据控制:组织对数据有完全的控制权,可以根据需要设置访问权限和安全策略。安全性:私有云数据库通常部署在组织内部的数据中心,利用内部网络&#xff0c…

爆款AI工具大盘点:最强文本、视频、音乐生成AI,适用岗位全解析!

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

Linux部署项目

手动部署 1.在IDEA写一个有关springboot项目 在windows客户端可以通过localhost:8080/hello 访问 2.用packge 命令将该springboot项目打包 并在target目录下找到打包的jar包 3.上传到linux上 个人习惯在usr/local/app 下上传该项目 创建切换到app目录下 mkdir /usr/local/ap…

互联网医院系统源码的创新应用:预约挂号小程序开发实战

预约挂号小程序作为互联网医院系统的创新应用,更加贴近用户需求,实现了预约挂号的便捷化和智能化。本篇文章,笔者将带领读者进入预约挂号小程序开发的实战过程,探索互联网医院系统源码在小程序开发中的创新应用。 一、互联网医院系…

UML相关1

汽车租赁系统中的用例图简述(10分) 本系统根据功能可以分为三个用例图: 客户用例图:主要描述客户注册、登录、找回密码、查询车辆信息(包括所有车辆信息、已借车辆信息、租赁历史信息)、修改个人信息、网上预订车辆、电话预定车…

java多线程临界区介绍

在Java多线程编程中,"临界区"是指一段必须互斥执行的代码区域。当多个线程访问共享资源时,为了防止数据不一致或逻辑错误,需要确保同一时刻只有一个线程可以进入临界区。Java提供了多种机制来实现这一点,例如synchroniz…

Excel 多列组合内容循环展开

某表格 A 列是编号,其他列是用逗号分隔的意义不同的分类列 ABCDEFG1Assembly#ProductTypeUnit ConfigNominal CapacitySupply VoltageGenerationCase Construction23H1012290001CMD,P24,36FAA,B33H1012290002CMD,P48,60FA,BA,B43H1012290003CMD,P24,36B,C,D,EAA,B …

注册讲堂 | 医疗器械监管的可追溯性与UDI

医疗器械监管的关键-可追溯性 在医疗领域,每一个环节的精准和透明都是至关重要的。医疗器械的可追溯性正是这一需求的核心,它确保了产品从生产到患者使用的整个路径可以被追踪和记录。这不仅关乎患者的安全,也是医疗质量保证的关键。 可追溯…

Python强化学习(Reinforcement Learning, RL)库之gymnasium使用详解

概要 在强化学习(Reinforcement Learning, RL)领域中,环境(Environment)是进行算法训练和测试的关键部分。gymnasium 库是一个广泛使用的工具库,提供了多种标准化的 RL 环境,供研究人员和开发者使用。通过 gymnasium,用户可以方便地创建、管理和使用各种 RL 环境,帮助…

Android native层的线程分析(C++),以及堆栈打印调试

文章目录 Android native层的线程分析(C),多线程实现1.native线程的创建第一部分:android_thread模块第二部分:linux_thread模块 2.测试linux_thread模块3.Android native的Thread类3.1源码分析 4.native层堆栈调试方法 Android native层的线…

postman教程-21-Newman运行集合生成测试报告

上一小节我们Postman Newman的安装方法,本小节我们讲解一下Postman Newman的具体使用方法。 使用Newman运行集合 1、导出Postman集合: 在Postman中,选择你想要运行的集合,然后点击“导出”按钮,选择导出为“Collect…

推荐使用三丰云免费云服务器、免费虚拟主机

官网地址:www.sanfengyun.com 三丰云服务器: 配置高:能够轻松运行应用程序和网站,在处理大量请求和保持高可靠性方面表现出色。 易用性好:界面直观、简单,能够轻松管理服务器和资源,快速创建和…

随便写写之——CSDN个人主页布局(二)

现在是中午11点30,还是有点迷糊,也不知道怎么了。 继续写写这个界面吧 代码太多了。吧上边的丢到组件里 加个图片好了,不然太丑了,看下main_haeader的布局 都是些比较简单的布局,头像这边就用了一个绝对定位定在了左…

计算机网络:网络层 - IPv4数据报 ICMP协议

计算机网络:网络层 - IPv4数据报 & ICMP协议 IPv4数据报[版本 : 首部长度 : 区分服务 : 总长度][标识 : 标志 : 片偏移][生存时间 : 协议 : 首部检验和][可变部分 : 填充字段] ICMP协议 IPv4数据报 一个IPv4数据报,由首部和数据两部分组成&#xff…

服务架构的设计原则

墨菲定律与康威定律 在系统设计的时候,可以依据于墨菲定律 任何事情都没有表面上看起来那么简单所有的事情都会比你预计的时间长可能出错的事总会出错担心的某一个事情的发送,那么它就更有可能发生 在系统划分的时候,可以依据康威定律 系…

【QT5】<知识点> QT常用知识(更新中)

目录 一、更改文本颜色和格式 二、QT容器类 三、字符串与整数、浮点数之间的转换 四、QString常用功能 五、SpinBox的属性介绍 六、滑动、滚动、进度条和表盘LCD 七、时间、日期、定时器 一、更改文本颜色和格式 动态设置字体粗体:QFont对象的setBold方法动态…

5.在Nginx中管理目录并允许浏览器中浏览和下载目录的文件

nginx.conf文件配置 charset utf-8; 防止文件名称为乱码。 autoindex on; 开启目录列表展示。 root /usr/local/software; 文件管理目录,浏览器浏览文件所在目录。

C++|哈希应用->位图

目录 一、概念 1.1原理分析: 1.2效率分析: 二、模拟实现 2.1位图框架初始化空间 2.2映射 2.3清零 2.4判断 2.5测试代码 三、位图扩展应用 一、概念 位图,本质上也是一个数组,通过哈希思想构造的一种数据结构&#xff0c…

每日复盘-202406012

今日关注: 这几天市场打板情绪环境转好,轻仓试错 20240612 六日涨幅最大: ------1--------605258--------- 协和电子 五日涨幅最大: ------1--------605258--------- 协和电子 四日涨幅最大: ------1--------301036--------- 双乐股份 三日涨幅最大: --…

vuInhub靶场实战系列--Kioptrix Level #4

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 arp-scan主机扫描 2.2 端口扫描2.3 指纹识别2.4 目…