项目地址:https://github.com/DeYangLiu/AndroidPlayer/
下载链接:https://github.com/DeYangLiu/AndroidPlayer/raw/eea3e665d987fd0f8f0cc03528b823b4782bb6ed/ffplay-v2.8.apk
v2.8 --
* 现在内联汇编(inline-asm)可以编译了,解码速度估计会快些;
* 关闭调试打印;
* 其他见ffmpeg 官方2.8 ChangeLog。
v2.6 --
* ffmpeg and sdl2 : sync to newest source code.
* History.java : add external editable source "/sdcard/ffplay/history.txt"
* ffplay2.c : force set to screen size when video size too large (e.g. Cammera Photos).
看点:
支持软键盘输入和历史记录使用了EditText和内部存储。 这里考虑了历史记录的更新: 总共8条记录,新的放在后面,最前面被挤出,重复的忽略。
用ListView实现的简易文件浏览器。
用intent启动另一个Activity。
ndk 调试。
移植ffmpeg 2.5和sdl2 到android的各种坑。
同时编译多个库
====
ln -s /mnt/OpenSource/SDL_image jni/
ln -s /mnt/OpenSource/SDL_image/showimage.c jni/src/
gvim jni/src/Android.mk
LOCAL_SRC_FILES = ... showimage.c
LOCAL_SHARED_LIBRARIES += SDL2_image
测试 cannot locate symbol atof
忘了SDLActivity.java里面加上SDL2_image
然后又出现cannot locate symbol "signal"
Q. how to judge android phone 32 or 64bit?
A: adb pull /system/bin/dalvikvm && file dalvikvm
当然我的手机是32bit的啦,网上有人需要用32bit的ndk的,我试了也没用。
迷茫中,下午又搜了一番,遇到[1]之后,事情出现转机。
ffmpeg4android
====
[1]下载下来不知道从哪里开始,
仔细读了里面的shell脚本,明白了要下载ffmpeg源码,
然后buildtest.sh。[1]的最初计划是和android source
tree下面编译的,但是在内地下载不了, 而u pelya 改造成可以单独编译。
我一开始试最新的ffmpeg2.5,失败了。看到脚本里面只支持到1.1,于是下载了[2]。
makefiles下面三个文件:
Android_configure.mk -- 设置配置参数字符串
Android_.mk -- libavutils libavcodec 等子目录都用到的编译参数。
Android.mk -- 包含上面两个文件; 跟据config.mak设置APP_MODULES编译参数。
然后把ffmpeg源码解压到$ffmpegdir,把makefiles下面的文件复制过去。
生成两个文件:
jni/Android.mk
jni/Application.mk
ln -s $ffmpegdir jni/ffmpeg
然后就可以编啦:
ndk-build -j8 2>&1 | tee build.log
因为SDL2本身自带一个mk,直接
ln -s $sdldir jni/SDL
在jni/Application.mk加上SDL2。
剩下还需一个jni测试入口:
cp -rf android-ndk-r10d/samples/hello-jni/jni/src jni/adapter
UI入口:
cp -rf android-ndk-r10d/samples/two-libs/src src
项目文件:
cp -rf android-ndk-r10d/samples/two-libs/{res, AndroidManifest.xml default.properties}
git代码已使用静态链接。感谢[1]的指引。
ref
====
[1] git://git.code.sf.net/u/pelya/ffmpeg4android
[2] http://ffmpeg.org/releases/ffmpeg-1.1.tar.bz2