最近做html5移动开发,在android端录音生成的amr格式在ios端无法播放,ios无法不支持amr。所以需在服务端对amr格式文件进行转换生成MP3格式文件进行播放。
通过网上查的资料,使用jave.jar包将amr格式的音频文件转成mp3格式,参考来源:http://mfan.iteye.com/blog/2032454。
上述方法在windows系统下运行不存在问题,但是在linux环境下会出现转换为0字节的MP3,网上解决方案参考:http://t.cn/RLHVa5E。
我测试这篇文章的方法,没成功,所以根据jave.jar的原理自己简单写了一个转换方法。
jave.jar中使用ffmpeg进行转换。下载站点:http://ffmpeg.org/download.html。
根据不同的系统下载不同的ffmpeg,放在程序中的目录下,通过Runtime.getRuntime().exec调用命令行执行转换。注:windows系统有时会出现转换失败的情况,因为系统差pthreadGC2.dll文件,需要把这个文件放在ffmpeg.exe的同级目录下。代码如下
/**
* amr转换MP3
* @param url ffmpeg目录不包含ffmpeg文件
* @param audiopath amr文件路径
* @param target MP3文件路径
*/
public static void changeToMp3(String url,String audiopath, String target ) {
try {
//windows下面的是ffmpeg.exe linux如下
Process process = Runtime.getRuntime().exec(url + File.separator + "ffmpeg -i "+ audiopath + " " + target);
InputStreamReader ir = new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
while ((line = input.readLine()) != null)
System.out.println(line);
int exitVal = process.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Exception e) {
System.err.println("IOException " + e.getMessage());
}
}