amr转mp3格式代码附上:
private boolean convertAmr2MP3(File src, File target) {
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
Encoder encoder = new Encoder();
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
try {
encoder.encode(src, target, attrs);
return true;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InputFormatException e) {
e.printStackTrace();
} catch (EncoderException e) {
e.printStackTrace();
}
return false;
}
在有的环境下报错:
it.sauronsoftware.jave.InputFormatException
at it.sauronsoftware.jave.Encoder.parseMultimediaInfo(Encoder.java:659)
at it.sauronsoftware.jave.Encoder.encode(Encoder.java:840)
at it.sauronsoftware.jave.Encoder.encode(Encoder.java:713)
at com.goldarmor.live800.util.FileHandleUtil.amrToMp3(FileHandleUtil.java:34)
at com.goldarmor.live800.cmd.operatorCMD.SendVoiceMsgToIm.uploadAndGetVoiceUrl(SendVoiceMsgToIm.java:279)
at com.goldarmor.live800.cmd.operatorCMD.SendVoiceMsgToIm.process(SendVoiceMsgToIm.java:202)
at com.goldarmor.live800.server.ServerBase.doGet(ServerBase.java:101)
at com.goldarmor.live800.server.ServerBase.doPost(ServerBase.java:145)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.goldarmor.live800.util.XSSFilter.doFilter(XSSFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:652)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:610)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:410)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
找其原因:如果ffmpeg没有加载到这个pthreadGC2.dll文件,就会报以上错误
解决方案:将pthreadGC2.dll和ffmpeg的路径固定,通过
public class MyFFMPEGExecute extends FFMPEGLocator {
protected String getFFMPEGExecutablePath() {
String path = “获取以上两个文件的绝对路径”;
return path;
}
}
搞定!!!