我开始使用舞台惊吓框架工作在我的视频 Session 应用程序中在Jelly bean之前在android中实现硬件解码器 .
我已经在Mac系统中下载并构建了android源代码 . 我不清楚与AOSP合作的整个想法 . 我的问题是(关于stagefright框架)
-
在AOSP构建之后,我在哪里可以找到libstagefright.so?
-
如果我在我的类中使用OMX编解码器进行解码,我应该如何将libstagefright.so链接到我的应用程序的本机代码?如果我通过复制libstagefright.so来构建我的本机代码并通过make文件链接它是这样的吗?
-
如何在我的应用程序中使用它?如果我通过System.loadLibrary(“”)加载它,它会工作吗?
UPDATE:
我试过了Ganesh的建议 . 但是当我尝试使用NDK构建项目时,它没有将头文件包含在LOCAL_C_INCLUDES中 .
这是我的android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := custom_decoder
LOCAL_C_INCLUDES := $(LOCAL_PATH)\includes \
frameworks/av/media/libstagefright/include \
frameworks/native/include/media/openmax \
frameworks/base/include/media/stagefright
LOCAL_SHARED_LIBRARIES := \
libstagefright libstagefright_omx libstagefright_foundation libutils liblog
LOCAL_SRC_FILES := custom_decoder_jni.cpp custom_decoder.cpp
include $(BUILD_SHARED_LIBRARY)
当它正在读取AOSP的包含时,会从custom_decoder.h中显示错误 .
fatal error: DataSource.h: No such file or directory.
我没有在我的项目中包含任何AOSP . (按照Ganesh在评论2中的建议) . 我应该这样做吗?
我还应该做些什么才能建成......
2 回答
要回答您的具体问题,
libstagefright.so
已 Build 并安装在/system/lib
我假设您在本机代码中使用了
libstagefright.so
. 有了这个假设,您就不必复制了 . 我假设您正在将模块构建为可加载的库,即.so
文件 . 因此,如果您可以识别对libstagefright.so
到LOCAL_SHARED_LIBRARIES
的依赖关系以及包含头文件,那么它应该足以构建您的模块 . 请参阅此example of building a FLAC encoder,其中已处理类似的依赖项 .通过应用程序,如果您指的是与
JNI
层交互的Java
应用程序,那么第2点应该足够了 . 但是,如果您要创建本机图层应用程序,我建议您按照stagefright command line utility's makefile .您无需重建
libstagefright.so
即可在您的应用中使用它 . 您可以从设备中使用adb pull
库,甚至可以从模拟器中获取库 .请注意
libstagefright
与/system/lib
中的许多组件进行通信,其中一些组件特定于SoC供应商(例如Qualcomm)或ODM(例如Samsung) . Stagefright的一些用途可能需要特定于设备的怪癖 . 这就是 OpenMAX IL 尚未在Android上正式曝光的原因 . 自2011年11月起, OpneMAX AL 已获得官方支持 .无论如何,无法直接从Java访问
libstagefright
. 如果您正在寻找用于视频通信的Java解决方案,那么首先应该看一下优秀的libstreaming库 .使用
libstagefright
的好处通常在于您拥有只需要连接到高效编解码器的本机(C / C)库 .关于Android硬件解码器的相关问题,这是一个很好的answer .