简短:我想在我的Android应用中简单地播放用ffmpeg转换的声音文件,但碰巧有问题让它发挥作用。
长:我们有一个iphone应用程序和一个Android应用程序做同样的事情,我必须移植功能播放用户交互的声音。我有aiff
格式的源文件,并尝试将其转换为mp3
for android。但是当应用程序尝试加载文件时,应用程序会继续崩溃
AssetFileDescriptor fileDescriptor = context.getResources().openRawResourceFd(resid);
final MediaPlayer mp = new MediaPlayer();
mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
fileDescriptor.close();
mp.prepare();
更具体地说,mp.setDataSource
崩溃了。一些挖掘让我相信编码出了问题。声音文件本身位于res / raw。
11-29 17:11:48.012: ERROR/SoundManager(15580): java.io.IOException: setDataSourceFD failed.: status=0x80000000
11-29 17:11:48.012: ERROR/SoundManager(15580): at android.media.MediaPlayer.setDataSource(Native Method)
...
我尝试了什么:
所以,ffmpeg
转换参数如下:
$ ffmpeg -i click_24db.aif -f mp3 ~/foobar/wheel_click.mp3
ffmpeg version 0.7.8, Copyright (c) 2000-2011 the FFmpeg developers
built on Nov 24 2011 14:31:00 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
configuration: --prefix=/opt/local --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libopenjpeg --enable-libxvid --enable-libx264 --enable-libvpx --enable-libspeex --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64 --enable-yasm
libavutil 50. 43. 0 / 50. 43. 0
libavcodec 52.123. 0 / 52.123. 0
libavformat 52.111. 0 / 52.111. 0
libavdevice 52. 5. 0 / 52. 5. 0
libavfilter 1. 80. 0 / 1. 80. 0
libswscale 0. 14. 1 / 0. 14. 1
libpostproc 51. 2. 0 / 51. 2. 0
Input #0, aiff, from 'click_24db.aif':
Duration: 00:00:00.01, start: 0.000000, bitrate: 1570 kb/s
Stream #0.0: Audio: pcm_s16be, 44100 Hz, 2 channels, s16, 1411 kb/s
Output #0, mp3, to '/Users/xyz/foobar/wheel_click.mp3':
Metadata:
TSSE : Lavf52.111.0
Stream #0.0: Audio: libmp3lame, 44100 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop, [?] for help
size= 1kB time=00:00:00.05 bitrate= 92.9kbits/s
video:0kB audio:0kB global headers:0kB muxing overhead 45.563549%
生成的文件在iTunes中播放效果不佳,在使用android.media.MediaPlayer加载时无法在vlc中播放和崩溃(注意:我首先尝试使用SoundPool lib,同时使用mp3和ogg,但是没有工作要么)。
我还尝试了以下参数,但这些参数都不起作用:
ffmpeg -i inputfile.aif -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 outputfile.mp3
我正在研究osx,今天用macports构建ffmpeg,android api等级是7(google api,2.1-update1)。查看dev.android上的“支持的格式”表并未表明我的文件超出了规范,但我可能会误解。
我对比特率等没有丝毫线索,所以有人可以指点我正确的ffmpeg参数组合来获取Android的工作mp3吗?我不在乎生成的文件是mp3,ogg还是3gp等等。