标签:
最近项目里有和app对接,要把ios传过来的amr录音在web上播放。一开始找了苹果的quickTime,各种奇怪没法用,而且官网上好像不能下载了,干脆后台转成MP3。同事找到了一个java的封装jave.jar。 在window上是可以转的,到linux上不行了。
我看了下jave的官网,这是个对ffmpeg的封装,刚好以前玩R语言的时候用过ffmpeg。官网说法是,jar包里的ffmpeg.exe和ffmpeg可执行程序是随便编译的给32位系统用的,所以实际上需要自己提供ffmpeg的可执行程序的。
编译环境: 阿里云reahat 64位。版本不知道,也不重要。
ffmpeg编译完分两种方式,动态的和静态的。动态的就是ffmpeg需要调用mp3或者amr的库的时候,去/usr/lib下面去找库然后加载进来。静态的就是把这些库一起编译进可执行文件里面,最后只生成一个文件,不需要再去系统里面加载别的库。如果是放到jave.jar里的话,肯定是搞成静态的。
#lame MP3的支持 要确保是不是静态的,可以去看一下ffmpeg_build里有没有.so文件,没有的话就ok tar zxf lame-3.99.5.tar.gz cd lame-3.99.5 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-static make && make install cd .. #amr tar zxf opencore-amr-0.1.3.tar.gz cd opencore-amr-0.1.3 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-static make && make install cd .. #编译ffmpge tar zxf ffmpeg-2.8.1.tar.gz cd ffmpeg-2.8.1 PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --pkg-config-flags="--static" --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --disable-yasm --disable-shared --enable-static make & make install
其实很简单,问题就是一开始参考网上各种方式,总是报 libmp3lame >= 3.88.3 not found,自己研究了一下,libmp3lame自动安装的话到/usr/lib下面了,ffmpeg如果没去这里找的话就找不到,所以这个地方最好不要./configure & make & make install,而是像上面这样,建个目录,安装到一起。另外如果没有root权限,其实也只能这样装到自己的目录下面。
另外一个问题是,编译成功了,但是运行命令的时候比如ffmpeg -i test.amr test.mp3,还是报库找不到,如果编译成动态链接的,可以看下库的位置是不是不对,不对的话建链接。
ldd `which ffmpeg` find /usr/local/lib/
要么就编译成静态的,毕竟用起来比较方便。
标签:
原文地址:http://my.oschina.net/u/1047640/blog/525800