设为首页 加入收藏

TOP

完美解决:Java微信语音amr格式转mp3格式,兼容Linux/Mac/Windows,支持Maven
2018-12-15 14:08:38 】 浏览:98
Tags:完美 解决 Java 语音 amr 格式 mp3 兼容 Linux/Mac/Windows 支持 Maven

少费话,先上代码

引入 maven 依赖

 <dependency>
    <groupId>com.github.dadiyang</groupId>
    <artifactId>jave</artifactId>
    <version>1.0.0</version>
 </dependency>

调用 AudioUtils.amrToMp3 方法

三行代码搞定格式转换

public void amrToMp3()  {
    File source = new File("target/test-classes/material/testAudio.amr");
    File target = new File("testAudio.mp3");
    it.sauronsoftware.jave.AudioUtils.amrToMp3(source, target);
}

探索过程

最近接到基于微信公众号开发的需求,在处理微信消息的时候,发现语音类型的消息微信推送过来的是 amr 格式的文件,而在网页 HTML5的audio标签不支持amr格式,很是麻烦。

于是到处查资料,发现了 JAVE 这个项目,它封装了 ffmpeg 的命令,让开发者可以通过 Java 转换文件格式

不幸的是,这个项目可谓年久失修,存在以下几个问题

JAVE 项目的问题

  1. 项目老旧没再维护。官网最近版本是2009年发布的,其依赖的ffmpeg早已过时,很多情况下用不了。
  2. 转码一直报异常 EncoderException: Stream mapping
  3. 没有发布maven仓库,而且 JAVE 本身也不是一个maven项目
  4. 不支持Mac OS

解决

本项目为解决上述问题,根据网上的资料进行整理和修改,我创建了一个 JAVE开源项目 并且发布到 maven中央仓库,让整个解决方案变得更加简单。

项目特点

  • 这是一个maven项目,而且已发布到中央仓库。
  • 项目依赖的 ffmpeg 可执行文件经过验证可以使用(单元测试中提供了一个简单的检验方法)
  • 解决了amr转mp3出现的 EncoderException: Stream mapping
  • 支持 Linux/Windows/Mac 平台

JAVE原理

  1. 初始化时判断当前运行环境,将bin目录中对应的 ffmpeg 可执行文件拷贝到临时目录中
  2. 根据文件类型及配置通过 Runtime.getRuntime().exec(cmd) 执行 ffmpeg 对应的转码命令

自定义 ffmpeg 路径

如果程序无法通过拷贝资源文件的方式获取到 ffmpeg 的可执行文件或者内置的 ffmpeg 不支持你所使用的操作系统

你可以通过环境变量或者在 java 中设置 System.setProperty("ffmpeg.home", "ffmpeg可执行文件所在的目录") 的方式指定你的系统中安装的可用的 ffmpeg 文件的目录,如 System.setProperty("ffmpeg.home", "/usr/local/bin/")

项目GitHub地址

参考


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ImportNew一周资讯:开发者应该了.. 下一篇从零开始用好Maven:从HelloWorld..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }