Android NDK编译FFmpeg可以采用cygwin方法来实现。
具体步骤:
首先是config脚本,编译ffmpeg之前必须得先configure一下,configure是一个shell脚本,根据命令行参数不同来裁剪模块,生成特定的config.h文件。
confiure脚本文件在ffmpeg目录里可以找到。
重新建立以个shell脚本文件config.sh,这个文件只是为了编译方便。
例子:
注意:
编写config脚本时候,其中的路径需要使用windows形式的路径,不能使用/cygwindriver/d/android 这种格式的路径。
B. 如何在Android用FFmpeg解码图像
fetch code
用git把ffmpeg(我用的github上FFmpeg-Android)和x264(vlc的官方git)分别都clone下来。
build x264
在x264目录里面写一个myconfig.sh(其实直接把这些命令打在终端也行,问题是有的时候需要改来改去,不如写个文件改起来方便)
export NDK=/opt/android-ndk
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt
export PLATFORM=$NDK/platforms/android-14/arch-arm
export PREFIX=/home/mingkai/softwares/x264
./configure \
--enable-pic \
--enable-static \
--enable-shared \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix="/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-"
\
--sysroot=$PLATFORM \
--prefix=$PREFIX
其中prefix貌似直接用"arm-linux-androideabi-“也可以。
然后可以make和make install了。(记得改PREFIX等环境变量)
build FFmpeg
这个是从github上FFmpeg-Android里面的FFmpeg-Android.sh里面改了改一些参数。
最主要的是FFMPEG_FLAGS,里面都是一些关于FFmpeg的参数设定,尤其是是否启用encoder/decoder之类的。
还有一点就是再下面EXTRA_CFLAGS里面加上
“-I/path/to/x264/include”
EXTRA_LDFLAGS里面加上
“-L/path/to/x264/lib -lx264”。
C. android ffmpeg怎么用
这个是一个大项,专业人员都要学两三天才能下手,所以我就简述一下
1、最简单你可以使用现成的,很多基于ffmpeg封装的框架 (ijkPlayer
GSYVideoPlayer)
2、自己做 需要有JNI知识(包含基本C/C++语法)给你看下大致流程
其中so库也可以网上下载到
3、ffmpeg参考文献基本都是推雷霄骅的,但是他不幸GG了,所以文献什么的都有点过时,我们使用AS开发有很多便利了,他都没讲到,可以网络过滤获取最新的视屏资源和文章学习
D. 我想用ffmpeg命令行转换一个视频文件,视、音频编码格式不变,只是将画面旋转90度,请问命令行该如何写
在你的转码命令里面添加上-vf rotate=PI/2或者-vf rotate=3*PI/2,例如
ffmpeg -i E:\ffmpeg\test.mp4 -y -vf rotate=PI/2 E:\ffmpeg\dest1.mp4
E. android-ffmpeg-x264 怎么用
Android内置的编解码器实在太少,于是我们需要FFmpeg。Android提供了NDK,为我们使用FFmpeg这种C语言代码提供了方便。
不过为了用NDK编译FFmpeg,还真的花费了不少时间,也得到了很多人的帮助,最应该谢谢havlenapetr。我觉得我现在这些方法算是比较简洁的了--
下面就尽量详细的说一下我是怎么在项目中使用FFmpeg的,但是基于我混乱的表达能力,有不明白的就问我。
你得了解JNI和Android NDK的基本用法,若觉得我的文章还不错,可以看之前写的JNI简单入门和Android NDK入门
首先创建一个标准的Android项目vPlayer
android create project -n vPlayer -t 8 -p vPlayer -k me.abitno.vplayer -a PlayerView
然后在vPlayer目录里
mkdir jni && cd jni
wget http://ffmpeg.org/releases/ffmpeg-0.6.tar.bz2
tar xf ffmpeg-0.6.tar.bz2 && mv ffmpeg-0.6 ffmpeg && cd ffmpeg
在ffmpeg下新建一个config.sh,内容如下,注意把PREBUILT和PLATFORM设置正确。另外里面有些参数你也可以自行调整,我主要是为了配置一个播放器而这样设置的。
#!/bin/bash
PREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0
PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/arch-arm
./configure --target-os=linux \
--arch=arm \
--enable-version3 \
--enable-gpl \
--enable-nonfree \
--disable-stripping \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-ffprobe \
--disable-encoders \
--disable-muxers \
--disable-devices \
--disable-protocols \
--enable-protocol=file \
--enable-avfilter \
--disable-network \
--disable-mpegaudio-hp \
--disable-avdevice \
--enable-cross-compile \
--cc=$PREBUILT/bin/arm-eabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-eabi- \
--nm=$PREBUILT/bin/arm-eabi-nm \
--extra-cflags="-fPIC -DANDROID" \
--disable-asm \
--enable-neon \
--enable-armv5te \
--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"
运行config.sh开始configure
chmod +x config.sh
./config.sh
configure完成后,编辑刚刚生成的config.h,找到这句
#define restrict restrict
Android的GCC不支持restrict关键字,于是修改成下面这样
#define restrict
编辑libavutil/libm.h,把其中的static方法都删除。
F. 如何在Android上集成ffmpeg
下面把具体编译步骤描述如下,假定NDK安装在~/android-ndk-r7:
1. 首先从FFmpeg官网下载最新的release版本源码ffmpeg-0.11.tar.gz解压缩到Android源码树的ffmpeg/下。
2 准备一个编译脚本build_android.sh并放在ffmpeg/下面,这个脚本也是Rockplayer提供的,需做一些修改,其内容附在后面。咱目前用的也会附在后面。
3 在ffmpeg目录下运行./build_android.sh开始编译FFmpeg,编译好的libffmpeg.so会放在文件夹android里面,一共有3个版本分别对应3种ARM体系结构,包括armv7-a、armv7-a-vfp、armv6_vfp,根据所运行的硬件平台选取其中一个版本。为了编译使用FFmpeg的程序时可以方便地找到libffmpeg.so,可将它复制到$OUT/system/lib/和$OUT/obj/lib/,当然这一步也可以加在build_android.sh中做。
4. 接下来就是编译可执行文件ffmpeg了,这个工具可以在命令行下完成FFmpeg提供的几乎所有功能包括编码、解码、转码等,也是用来调试和验证很有用的工具。其实上述编译完后在$ANDROID_BUILD_TOP/external/ffmpeg/下也会生成ffmpeg,但是在设备上无法运行。为了编出能在设备上运行的ffmpeg,可以写一个简单的Android.mk,
G. 如何运行从Android的命令行的ffmpeg
在前面编译FFmpeg类库编译ffmpeg时,编译脚本中使用了参数 –disable-ffmpeg,所以是不会生成ffmpeg工具的,即使生成了,
在Android应用下也无法直接使用。
但是,FFmpeg 命令行是十分强大易用的,我们可以用命令行完成大部分的需求,So,Let’s Do it.
http://blog.csdn.net/chengkaizone/article/details/52984091
H. ffmpeg 命令行的输出文件的路径该怎么写
intindex=1
string.Format("sample_{0:000}.jpg",index);
index=index+1
批处理:
ffmpeg-iE:RevolutionOS.rmvbD:{xxxxxx}sample.jpg-ss00:00:05-r1-vframes1-an-vcodecmjpeg
I. ffmpeg 命令行 在android执行
对于ffmpeg我是彻底小白,昨天刚开始接触,就是按着网上的教程安装了MingGW和msys神马的一大堆,然后貌似编译出了可以用的ffmpeg。
现在的情况是:打开msys的DOS命令窗口,照着网上写的输入了几个简单的命令,能实现转换格式、截取某时刻的缩略图。这样说明ffmpeg是编译成功了吧?
【但是】我看网上关于ffmpeg的demo程序,都是很长很长的程序,应该是 .c 文档之类的,并不是在DOS命令窗口敲的命令。是应该用VS2010之类的,编辑这些长的程序然后运行么?如果是的话,具体怎么操作的呢?
还是说,这些程序只能在linux环境下运行?
今天费了好大的劲儿才把ffmpeg编译出来,但是由于对编程开发工具不熟悉(只会简单的码代码,编译运行..),引入头文件函数库神马的也都不太懂,实在是不知道怎么用。
身边很少有了解ffmpeg的,网上的信息也很零碎,自己入门实在是太困难了。。 但这是跟老师做的项目,不能不学。所以求各位大神多多指导,多谢了!
泪目~~T_T~~
J. ffmpeg 命令行的输出文件的路径该怎么写
ffmpeg 输出文件无须参数,直接写 d:\path\filename.mp4。
ffmpeg -i c:\input\k.mp4 -c d:\path\filename.mp4。
在windows下,路径中出现空格或其他空白符时,则需要用双引号把路径包括起来。
比如 "d:\path\my file.mp4"