Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例

1.准备JAR包

Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例_第1张图片


2.代码

 首先确定你要转换的文件类型,如amr转成MP3格式,如果你想转换其他的格式,可以参考JAVE 视音频转码,文中详细解释了

JAVE(Java Audio Video Encoder)各个组件介绍及属性设置。

Eg(amrToMp3.class):

package test;
import it.sauronsoftware.jave.AudioAttributes;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.EncodingAttributes;
import it.sauronsoftware.jave.InputFormatException;
import java.io.File;


/**
 *   文件格式转换测试类
  * @Title: 
  * @Description: TODO 
  * @author: minglei ZHAO   
  * @return   
  * @date: 2018年7月9日 下午3:40:27
 */
public class amrToMp3 {


  public static void main(String[] args) throws Exception {
    changeTemp();
  }
  public static void changeTemp() throws InputFormatException {
    File source = new File("E:\\音频怪物 - 短信和闹铃.mp3");   //源文件
    File target = new File("E:\\音频怪物 - 短信和闹铃.amr");   //目标文件
    AudioAttributes audio = new AudioAttributes();
    audio.setCodec("libmp3lame");
    EncodingAttributes attrs = new EncodingAttributes();
    attrs.setFormat("mp3");
    attrs.setAudioAttributes(audio);
    Encoder encoder = new Encoder();
    try {
      encoder.encode(source, target, attrs);
    } catch (IllegalArgumentException | EncoderException e) {
      e.printStackTrace();
    }

  }
}

另外如果你的需求中要求是传入base64编码格式的文件字符串,可以参考以下代码:

package test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import util.ftpUtil;


/**
 * 将本地文件通过base64编码生成在文件中 ,方便通过postman等接口测试工具发送请求,进行接口测试
  * @Title: 
  * @Description: TODO 
  * @author: minglei ZHAO   
  * @return   
  * @date: 2018年7月9日 下午3:37:01
 */
public class FileToBase64 {
public static void main(String[] args) {
  File file = new File("E:/", "file12.txt");  //创建文件对象
  
  
  try {
      if (!file.exists()) {               //如果文件不存在则新建文件
          file.createNewFile();           

      }
      FileOutputStream output = new FileOutputStream(file);
      ftpUtil ftpUtil = new ftpUtil();
      String getImageStr = ftpUtil.GetImageStr("E:/test.amr");
      byte[] bytes =getImageStr.getBytes();
      output.write(bytes);                //将数组的信息写入文件中
      output.close();
  } catch (IOException e) {
      e.printStackTrace();
  }
}
}

接下来,你就可以进行测试了,Main方法如下:

package test;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import util.FileUtil;
import util.ftpUtil;

/**
 * 
  * @Title: 
  * @Description: TODO 
  * @author: minglei ZHAO   
  * @return   
  * @date: 2018年7月9日 下午3:45:39
 */
public class Main {
  public static void main(String[] args) throws Exception {
    ftpUtil ftpUtil = new ftpUtil();
    FileUtil fileUtil = new FileUtil();
    
    String path = "E:/temp/";
    fileUtil.judeDirExists(new File(path));
    String hostname = "192.168.1.185";
    // ftp服务器端口号默认为21
    Integer port = 21;
    // ftp登录账号
    String username = "lkqftp";
    // ftp登录密码
    String password = "lkqftp";
    
    // 将文件转换成base64(这个步骤可以省略,我这么做是因为前端传过来的是base64的字符串,该amr文件为了方便我测试)  
    String getImageStr = ftpUtil.GetImageStr("E:/20180705_165931.amr");
    // 将base65转成文件
    byte[] generateImage = ftpUtil.GenerateImage(getImageStr);
    File source = fileUtil.getFileFromBytes(generateImage,path+"//"+"20180705_165931.amr");
    File target = new File(path+"//"+"20180705_165931.mp3");
    //将amr文件转换成Mp3文件 
    ftpUtil.amrToMp3(source,target);
    // 将base64转换成byte[]
    String getImageStr2 = ftpUtil.GetImageStr(path+"//"+"20180705_165931.mp3");
    byte[] generateImage2 = ftpUtil.GenerateImage(getImageStr2);
    
    // 通过ftp将文件流写出
    InputStream is = new ByteArrayInputStream(generateImage2);
    String a = "mp6";
    String b = "zml";
    ftpUtil.uploadFile(a + "/" + b, "20180705_165931.mp3", is, hostname, port, username, password);
    //删除临时生成的文件
    fileUtil.deleteFile(path+"20180705_165931.amr");
    fileUtil.deleteFile(path+"20180705_165931.mp3");
  }
}

3.问题总结

在本地测试过程中,会遇到各种各样的错,以下做出我遇到的问题:

Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例_第2张图片

Windows下出现如上报错,不要紧,看下文件是否转换成功,通过qq影音等工具试听文件转换后是否能正常播放,我就出现过amr文件无法渲染导致转换报错。。。。。如下,虽然代码报错,但MP3文件照常生成。

Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例_第3张图片


因为Windows对JAVE的集成较好。而

将代码移植到linux中时出现了很多在Windows平台下不会出现的异常。例如报错或者文件生成之后为0KB。这有两个可能的原因造成。  1.JAVE中jar包中包含的ffmpeg不匹配  

Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例_第4张图片

2.Linux服务器的内核版本太低。(我就是出现的这个问题,所以我会在最后把我的源码发出来供大家参考,因为版本兼容性我已经经过测试,所以第一种原因不会出现问题)

  那么,怎么查看你的linux内核版本呢?

 命令---------------- uname -a  


查看内核版本是否为32或者以上,那么为什么要求必须要内核版本在32以上呢?原因如下:

Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例_第5张图片

JAVE只兼容内核为2.6.32以上的版本。。。。。。。。。。。如果你的是32以上版本,怎么测试你的文件在linux是否能正常转换呢?而不是报错,转换失败,文件0KB。。。。方法如下:

1.将JAVE.JAR或者jave-ffmpegjave-1.0.2.jar解压,找到ffmpeg文件,将文件放置到linux服务器中

2.将你需要转换的文件放在同级目录

3.给ffmpeg增加修改权限:  chmod +x ffmpeg

4.执行命令:./ffmpeg -i aaa.amr bbb.mp3  回车

如果出现以下打印输出,说明转换成功,检查转换出的MP3文件是否正常。。。则代码可以正常移植到linux。

Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例_第6张图片


下图就是由于内核不匹配出现的错误:

Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例_第7张图片



综上》》》》》》》》》》》》》》》》》》》》》》文件格式转换已解决。

我的代码内容包括 base64及文件之间的相互转换、文件上传下载到指定FTP服务器、文件格式转换等内容,相关jar包兼容。可以直接使用。

下载地址>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Java实现文件格式转换代码实例

你可能感兴趣的:(Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例)