我开始使用舞台惊吓框架工作在我的视频会议应用程序中在Jelly bean之前在android中实现硬件解码器。
我已经在Mac系统中下载并构建了android源代码。我不清楚与AOSP合作的整个想法。我的问题是(关于stagefright框架)
在AOSP构建后,我在哪里可以找到libstagefright.so?
如果我在我的类中使用OMX编解码器进行解码,我应该如何将libstagefright.so链接到我的应用程序的本机代码?如果我通过复制libstagefright.so来构建我的本机代码并通过make文件链接它是这样的吗?
如何在我的应用程序中使用它?如果我通过System.loadLibrary(“”)加载它,它会工作吗?
更新
我试过了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中提出的建议)。我应该这样做吗?
我还应该做些什么才能建成......
答案 0 :(得分:4)
您不需要重建libstagefright.so
即可在您的应用中使用它。您可以通过设备adb pull
库,甚至可以从模拟器中获取库。
请注意,libstagefright
与/system/lib
中的许多组件进行通信,其中一些组件特定于SoC供应商(例如Qualcomm)或ODM(例如Samsung)。 Stagefright的某些用途可能需要特定于设备的 quirks 。这就是 OpenMAX IL 尚未在Android上正式公开的原因。自2011年11月起, OpneMAX AL 已正式支持。
无论如何,无法直接从Java访问libstagefright
。如果您正在寻找用于视频通信的Java解决方案,那么首先应该看一下优秀的libstreaming库。
使用libstagefright
的好处通常在于您拥有只需要连接到高效编解码器的本机(C / C ++)库。
关于Android硬件解码器的相关问题,这是一个不错的answer。
答案 1 :(得分:2)
要回答您的具体问题,
libstagefright.so
已在/system/lib
我认为您在本机代码中使用libstagefright.so
。有了这个假设,您就不必复制了。我假设您正在将模块构建为可加载的库,即.so
文件。因此,如果您可以通过libstagefright.so
确定对LOCAL_SHARED_LIBRARIES
的依赖性以及包含头文件,那么构建模块应该足够了。请参阅已处理类似依赖关系的example of building a FLAC
encoder。
通过应用程序,如果您指的是与Java
层交互的JNI
应用程序,则第2点应该绰绰有余。但是,如果您要创建本机图层应用程序,我建议您关注stagefright
command line utility's makefile
。