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-docsexamples/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
类别和包含的插件列表
Category Included plugins
GSTREAMER_PLUGINS_CORE coreelements adder app audioconvert audiorate audioresample audiotestsrc gio pango typefindfunctions videoconvert videorate videoscale videotestsrc volume autodetect videofilter
GSTREAMER_PLUGINS_PLAYBACK playback
GSTREAMER_PLUGINS_VIS libvisual goom goom2k1 audiovisualizers
GSTREAMER_PLUGINS_EFFECTS alpha 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_NET tcp rtsp rtp rtpmanager soup udp dataurisrc sdp srtp rtspclientsink
GSTREAMER_PLUGINS_NET_RESTRICTED rtmp
GSTREAMER_PLUGINS_CODECS subparse 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_GPL assrender
GSTREAMER_PLUGINS_CODECS_RESTRICTED asfmux dtsdec faad mpegpsdemux mpegpsmux mpegtsdemux mpegtsmux voaacenc a52dec amrnb amrwbdec asf dvdsub dvdlpcmdec mad mpeg2dec xingmux realmedia x264 lame mpg123 libav
GSTREAMER_PLUGINS_SYS opensles opengl
GSTREAMER_PLUGINS_CAPTURE camerabin
GSTREAMER_PLUGINS_ENCODING encodebin
GSTREAMER_PLUGINS_GES nle

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

相关推荐
qzhqbb17 分钟前
基于统计方法的语言模型
人工智能·语言模型·easyui
冷眼看人间恩怨42 分钟前
【话题讨论】AI大模型重塑软件开发:定义、应用、优势与挑战
人工智能·ai编程·软件开发
2401_8830410843 分钟前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
AI极客菌2 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭2 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^2 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Power20246663 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k3 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫3 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班3 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型