大佬教程收集整理的这篇文章主要介绍了android – FFmpeg支持libstagefright硬件解码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
现在我想要ffmpeg使用libstagefright来完成硬件解码.@H_874_2@问题是,我可以编译.so libs,但是当我启动我的应用程序并加载这些.so libs,总是有一个java.lang.UnsatisfiedLinkError:@H_874_2@无法加载库:reloc_library [1314]:114找不到“_ZN7android11MediaBufferC1Ej”
我呆在那里几天.之前有人遇到过类似的问题吗?如果有人能给我一些关于这个错误的提示,这将是很棒的.
我的步骤:@H_874_2@1.将ffmpeg-2.1.4 souce代码编译成.so共享库.我使用build_libstagefright脚本执行此操作,并根据Internet上的一些指南进行一些修改.
#!/bin/bash #export NDK=/home/mingzhang/android/android-ndk-r9c export NDK=/home/mingzhang/android/android-ndk-r7 if [ "$NDK" = "" ]; then echo NDK variable not set,assuming ${HOME}/android-ndk export NDK=${HOME}/android-ndk fi echo "Fetching Android system headers" git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_base.git ../android-source/frameworks/base git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_av.git ../android-source/frameworks/av git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_native.git ../android-source/frameworks/native git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_hardware_libhardware.git ../android-source/hardware/libhardware git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_system_core.git ../android-source/system/core echo "Fetching Android libraries for linking" # Libraries from any froyo/gingerbread device/emulator should work # fine,since the symbols used should be available on most of them. #if [ ! -d "../android-libs" ]; then # if [ ! -f "../update-cm-7.0.3-N1-signed.zip" ]; then # wget http://download.cyanogenmod.com/get/update-cm-7.0.3-N1-signed.zip -P../ # fi # unzip ../update-cm-7.0.3-N1-signed.zip system/lib/* -d../ # mv ../system/lib ../android-libs # rmdir ../system #fi SYSROOT=$NDK/platforms/android-9/arch-arm # Expand the prebuilt/* path into the correct one #TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64 TOOLCHAIN=/home/mingzhang/android/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 export PATH=$TOOLCHAIN/bin:$PATH ANDROID_sourcE=../android-source ANDROID_LIBS=../android-libs ABI="armeabi-v7a" CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc #CC=$TOOLCHAIN/bin/arm-eabi-gcc-4.4.3 NM=$TOOLCHAIN/bin/arm-linux-androideabi-nm #NM=$TOOLCHAIN/bin/arm-eabi-nm rm -rf ../build/stagefright mkdir -p ../build/stagefright ADDI_CFLAGS="-marm" DEST=../build/stagefright DEST="$DEST/$ABI" FLAGS="--target-os=linux --arch=arm --cpu=armv7-a --cross-prefix=arm-linux-androideabi- --cc=$CC --nm=$NM" #FLAGS="--target-os=linux --arch=arm --cpu=armv7-a --cross-prefix=arm-eabi- --cc=$CC --nm=$NM" FLAGS="$FLAGS --sysroot=$SYSROOT" #FLAGS="$FLAGS --disable-avdevice --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-libstagefright-h264" FLAGS="$FLAGS --enable-shared --disable-demuxers --disable-muxers --disable-parsers --disable-avdevice --disable-filters --disable-programs --disable-encoders --disable-decoders --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-decoder=libstagefright_h264 --enable-libstagefright-h264 \ --enable-asm \ --enable-neon \ --enable-cross-compile \ --enable-gpl \ --disable-static \ --enable-memalign-hack" EXTRA_CFLAGS="-I$DEST/include" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_sourcE/frameworks/native/include" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_sourcE/frameworks/native/include/media/openmax" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_sourcE/frameworks/av/include" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_sourcE/frameworks/base/include -I$ANDROID_sourcE/system/core/include" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_sourcE/hardware/libhardware/include" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_sourcE/frameworks/base/media/libstagefright" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_sourcE/frameworks/base/include/media/stagefright/openmax" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/include -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/$ABI/include" EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/stlport/stlport" EXTRA_CFLAGS="$EXTRA_CFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=neon -marm -mtune=cortex-a8" EXTRA_CFLAGS="$EXTRA_CFLAGS -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -D_STLP_USE_NEWALLOC" EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -L$ANDROID_LIBS -Wl,-rpath-link,$ANDROID_LIBS -L$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/$ABI -static-libstdc++" EXTRA_CXXFLAGS="-Wno-multichar -fno-exceptions -fno-rtti" FLAGS="$FLAGS --prefix=$DEST" mkdir -p $DEST echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" > $DEST/info.txt ./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" | tee $DEST/configuration.txt [ $PIPESTATUS == 0 ] || exit 1 make clean #make -j4 || exit 1 #make -j4 make install || exit 1
>将编译的include和lib目录复制到我的android-ndk-r7 / sources / ffmpeg-2.1.4 / android / arm目录中.此目录下的Android.mk文件是.
LOCAL_PATH:= $(@L_157_24@my-dir)
包括$(CLEAR_VARS)@H_874_2@LOCAL_MODULE:= libavcodec@H_874_2@LOCAL_SRC_FILES:= lib / libavcodec-55.so@H_874_2@LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include@H_874_2@包含$(PREBUILT_SHARED_LIBRARY)
包括$(CLEAR_VARS)@H_874_2@LOCAL_MODULE:= libavformat@H_874_2@LOCAL_SRC_FILES:= lib / libavformat-55.so@H_874_2@LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include@H_874_2@包含$(PREBUILT_SHARED_LIBRARY)
包括$(CLEAR_VARS)@H_874_2@LOCAL_MODULE:= libswscale@H_874_2@LOCAL_SRC_FILES:= lib / libswscale-2.so@H_874_2@LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include@H_874_2@包含$(PREBUILT_SHARED_LIBRARY)
包括$(CLEAR_VARS)@H_874_2@LOCAL_MODULE:= libavutil@H_874_2@LOCAL_SRC_FILES:= lib / libavutil-52.so@H_874_2@LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include@H_874_2@包含$(PREBUILT_SHARED_LIBRARY)
包括$(CLEAR_VARS)@H_874_2@LOCAL_MODULE:= libavfilter@H_874_2@LOCAL_SRC_FILES:= lib / libavfilter-3.so@H_874_2@LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include@H_874_2@包含$(PREBUILT_SHARED_LIBRARY)
包括$(CLEAR_VARS)@H_874_2@LOCAL_MODULE:= libwsresample@H_874_2@LOCAL_SRC_FILES:= lib / libswresample-0.so@H_874_2@LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include@H_874_2@包含$(PREBUILT_SHARED_LIBRARY)@H_874_2@>在我的Android应用程序的jni目录下,Android.mk是.
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libripple #LOCAL_CFLAGS := -Werror LOCAL_SRC_FILES := entrypoint.cpp scene.cpp LOCAL_LDLIBS := -llog -lGLESv2 -lm include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := myfflib LOCAL_SRC_FILES := fflib.c LOCAL_LDLIBS := -L/home/mingzhang/ffmpeg_android/android-libs -llog -ljnigraphics -lz -landroid -ldl -lm -llog -lgcc -lc -lstagefright -lmedia -lutils -lbinder #-lstdc++ LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil libutils libstagefright libbinder libmedia libstdc++-6 include $(BUILD_SHARED_LIBRARY) $(call import-module,ffmpeg-2.1.4/android/arm)
Application.mk是:
APP_ABI=armeabi-v7a #APP_STL=gnustl_static APP_STL=stlport_static
avcodec: Remove libstagefright It serves absolutely no purpose other than to confuse potentional Android developers about how to use hardware acceleration properly on the the platform. The stagefright "API" is not public,and the MediaCodec API is the proper way to do this. Furthermore,stagefright support in avcodec needs a series of magic incantations and version-specific stuff,such that using it actually provides downsides compared just using the actual Android frameworks properly,in that it is a lot more work and confusion to get it even running. It also leads to a lot of misinformation,like these sorts of comments (in [1]) that are absolutely incorrect. [1] https://stackoverflow.com/a/29362353/3115956
所以也许不可能了.
你可能有更好的机会与AMediaCodec
和OpenMAX.
以上是大佬教程为你收集整理的android – FFmpeg支持libstagefright硬件解码全部内容,希望文章能够帮你解决android – FFmpeg支持libstagefright硬件解码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。