ffmpeg的Android交叉编译及在Qt for Android中的使用
来源:互联网 发布:邢帅教育 知乎 编辑:程序博客网 时间:2024/06/06 09:20
在将ffmpeg库移植到Qt for Android进行开发过程中过程遇到一些问题,这里将移植过程及遇到的问题记录如下,也让后面的人在使用Qt for android过程中遇到同类问题时解决起来更加简单快捷。
1.编译ffmpeg脚本网上很多,这里用的脚本,内容如下:
make clean
export NDK=/home/fish/android/android-ndk-r10b
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt
export PLATFORM=$NDK/platforms/android-19/arch-arm
export PREFIX=build
build_one(){
./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile --enable-runtime-cpudetect --disable-asm --arch=arm --cc=$PREBUILT/linux-x86/bin/arm-linux-androideabi-gcc --cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- --disable-stripping --nm=$PREBUILT/linux-x86/bin/arm-linux-androideabi-nm --sysroot=$PLATFORM --enable-gpl --enable-shared --disable-static --enable-small --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug --extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
}
build_one
make
make install
安装到/home/XXXX/ffmpeg-3.0.1/build后,进入/home/XXXX/ffmpeg-3.0.1/build目录可以看到bin/、include/、lib/等目录,在lib目录下执行readelf -h lib*查看库文件的头信息,是否为ARM平台。
2.在Qt for android中需要用到ffmpeg函数时,则将交叉编译得到ffmpeg动态库文件路径添加到工程的.pro文件中:
LIBS += "$$PWD/ffmpeg/libs/libavformat-57.so" \
"$$PWD/ffmpeg/libs/libavcodec-57.so" \
"$$PWD/ffmpeg/libs/libavdevice-57.so" \
"$$PWD/ffmpeg/libs/libavfilter-6.so" \
"$$PWD/ffmpeg/libs/libavutil-55.so" \
"$$PWD/ffmpeg/libs/libswresample-2.so" \
"$$PWD/ffmpeg/libs/libswscale-4.so" \
"$$PWD/ffmpeg/libs/libpostproc-54.so"
3. 在将编译生成的APK安装包部署到Android设备上时,需要一个必不可少的操作,点击"add"按钮添加所需的ffmpeg动态库,这样才不会在部署到真机上后,出现程序无法打开的情况,
通过ADB登陆手机shell,查看logcat内容:
E/dalvikvm(14692): dlopen("/data/app-lib/org.qtproject.example.ffmepg_client-2/libffmepg_client.so") failed: dlopen failed: could not load library "libavformat.so.57" needed by "libffmepg_client.so"; caused by library
表现在pro文件的就是:
contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
ANDROID_EXTRA_LIBS = \
$$PWD/ffmpeg/libs/libavcodec-57.so \
$$PWD/ffmpeg/libs/libavdevice-57.so \
$$PWD/ffmpeg/libs/libavfilter-6.so \
$$PWD/ffmpeg/libs/libavformat-57.so \
$$PWD/ffmpeg/libs/libavutil-55.so \
$$PWD/ffmpeg/libs/libpostproc-54.so \
$$PWD/ffmpeg/libs/libswresample-2.so \
$$PWD/ffmpeg/libs/libswscale-4.so \
}
备注:将其换成静态库编译时,得到的静态库在Qt编译时出现如下错误,这两个是数学公式里的对数,由于没有对数源码参考,所以这个问题未能解决:
libavcodec/imc.c:473: error: undefined reference to 'log2f'
libavcodec/ffv1enc.c:636: error: undefined reference to 'log2' 1 0
- ffmpeg的Android交叉编译及在Qt for Android中的使用
- oprofle在android中的交叉编译及使用3
- Android NDK 交叉编译 FFMPEG 及使用JNI接口
- qt for android从编译ffmpeg x264 aac 到在qtcreator上使用
- oprofile 在android中的交叉编译及使用方法1
- oprofile 在android中的交叉编译及使用方法2
- GDAL for Android在linux下交叉编译的问题
- i2ctools在android中的编译及使用
- 使用NDK交叉编译ffmpeg, android后台可执行。
- vlc for android的编译及使用
- Compile FFmpeg for Android(编译用于android的FFmpeg库)
- ffmpeg for Android编译出现的常见问题
- 交叉编译e2fsprogs For android
- 在Android编译并使用FFMPEG
- 编译FFmpeg在Android上使用
- 脱离AS在windows下使用CMake交叉编译for Android
- Android ffmpeg+librtmp+speex交叉编译
- ffmpeg的编译大全(包括 ffmpeg for android)
- 缓存换页机制
- 让div父元素的高度随子元素高度的变化而变化
- 结构型设计模式-装饰模式
- 线性回归-4-欠拟合、过拟合与局部加权线性回归
- Nginx加多个tomcat实现负载均衡,动静分离
- ffmpeg的Android交叉编译及在Qt for Android中的使用
- C++多态机制浅析
- 多重循环
- 程序员必知的10大基础实用性算法
- 送别银工、黎工
- iOS开发:开发中的一些小技巧
- C 【关键字&标识符】
- 什么是dict
- LayerDrawable