音频转码工具,主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放

1.调用微信提供的接口获取录音的InputStream字节流
public InputStream getInputStream(String mediaId) {InputStream is = null;try {String URL_DOWNLOAD_TEMP_MEDIA = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";String url = URL_DOWNLOAD_TEMP_MEDIA.replace("ACCESS_TOKEN", "自己写代码获取accessToken").replace("MEDIA_ID", mediaId);URL urlGet = new URL(url);HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();http.setRequestMethod("GET"); // 必须是get方式请求http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");http.setDoOutput(true);http.setDoInput(true);System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒http.connect();// 获取文件转化为byte流is = http.getInputStream();} catch (Exception e) {e.printStackTrace();}return is;
}
2.将获取到的字节流保存为amr文件
public String downloadMediaId(HttpServletRequest request, String mediaId) {String relfilePath = null;InputStream inputStream = getInputStream(mediaId);FileOutputStream fileOutputStream = null;try {//服务器资源保存路径String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/" + DateUtil.getYear() + "/wxmedia/audio/";savePath = savePath + "audio/"; String filename = String.valueOf(System.currentTimeMillis()) + ".amr";relfilePath = "upload/" + DateUtil.getYear() + "/wxmedia/audio/" + filename;File file = new File(savePath);if (!file.exists()) {file.mkdirs();}byte[] data = new byte[1024];int len = 0;fileOutputStream = new FileOutputStream(savePath + filename);while ((len = inputStream.read(data)) != -1) {// 判断结果是否有错if (new String(data).indexOf("errmsg") > -1) {return null;}fileOutputStream.write(data, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (fileOutputStream != null) {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}return relfilePath;
}

3.将保存的amr文件转成mp3文件

public void amrToMp3(String sourcePath, String targetPath) {File source = new File(sourcePath);File target = new File(targetPath);AudioUtils.amrToMp3(source, target);
}

4.所需的jar包依赖

<!--amr文件转音频map文件-->
<dependency><groupId>com.github.dadiyang</groupId><artifactId>jave</artifactId><version>1.0.3</version>
</dependency>

音频转码工具

支持 Linux/Windows/Mac 平台

因为是基于 JAVE 项目的修改,而 JAVE 是依赖 ffmpeg 所以可以适用于所有 ffmpeg 所支持的文件格式的转换。具体可以查看 JAVE 官方文档

原理

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

JAVE 项目的问题

ffmpeg 是依赖运行环境的,JAVE 项目封装了ffmpeg,它通过上述的原理使 java 可以调用ffmpeg而且支持跨平台。

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

本项目特点

本项目为解决上述问题而生。

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

扩展

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

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

如 System.setProperty("ffmpeg.home", "/usr/local/bin/")

微信公众号录音文件保存到自己开发的服务器(amr文件转mp3)相关推荐

  1. (Java篇)爬取微信公众号文章并保存为 PDF 格式

    前言 背景: 某一天,拿着自己的手机看着技术文章,然而手机看技术文章,有时候确实蛋疼,因为一旦代码多起来,小屏幕看的还是眼花:又或者某一天觉得这一篇文章,觉得写的很棒棒哦,于是先收藏,打算过几天看,然 ...

  2. 微信公众号文章批量保存到本地的方法

    其他不多说,直接入主题,目前比较常见的保存微信文章的方法有以下几种,简要分析如下: 1. 手动保存 微信登陆电脑客户端,用自带浏览器打开微信公众号文章,然后选择,复制,粘贴到Word里,进行保存. 这 ...

  3. 微信公众号支付java前后端分离开发

    微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付,支付宝微信都做了,这里就介绍一下微信公众号支付,这个公众号支付需要配置的东西太多了,官方文档 ...

  4. 微信公众号报修系统常见通用功能开发

    微信公众号报修系统常见通用功能开发 51报修系统是一款基于微信的用户报修.维修师傅接单.公司进行管理的一站式维修服务平台,实现报修.派单.接单.支付.评价.回访等功能.涵盖了各类生活维修服务,包括水电 ...

  5. python爬取正确但不出文件_使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  6. 微信公众号如何设置关键词回复Word/Excel/pdf/ppt等文件?

    大家好,我是运营小薇老师,今天给大家带来的课程是:<公众号如何设置关键词回复指定文件>,各位同学要认真听讲哦! 各位同学,大家都知道微信公众号有一个自动回复的功能,看看公众号后台,它可以设 ...

  7. 向微信公众号文章中添加mp4、rar、zip等文件给用户下载

    现在随着微信公众号的使用率越来越高 大家对公众号的功能需求也越来越广   假如想在文章中添加一个MP4.rar.zip等压缩文件 让用户来浏览.下载.编辑,就需要通过微附件小程序来实现了 使用微附件小 ...

  8. 将微信公众号的文章保存到本地pdf

    关注机器之心有一段时间了,推送的文章质量非常高. 我习惯于在pdf上边看边批注,就需要把公众号的文章保存为pdf. 那么,如果直接全选复制粘贴,文字没问题,但是图片无法复制下来. 方法是, 1. 用电 ...

  9. 基于微信公众号的答题投票系统——项目开发心得体会记录

    项目背景 项目需求 后台管理功能 用户功能 页面展示 项目信息 开发语言 数据库 项目构想 获取幸运用户 用户答题 项目反思 项目进度的安排 团队合作沟通方面 项目的构建 技术 本地开发和上线的模式区 ...

最新文章

  1. 很好的理解梯度 散度 旋度 下三角运算 费曼物理讲义
  2. 鼠标移出DIV层时,触发onMouseOut事件
  3. python怎么读write_Python如何读写文件?python写入文件读写操作详解
  4. matlab和vs2008联合编程
  5. 【贪心】Vijos P1615 旅行
  6. python文件读写方法手机,python文本文件读写的3种方法
  7. python中list的切片和range函数
  8. 通过反射调用方法会大大降低性能
  9. 【工具】(七):win10常用工具整理!!!
  10. Redis最大内存配置
  11. 关于注意力的自上而下和自下而上(top-down attention and bottom-up attention)
  12. 腾讯云人脸识别 报错 Entry name ‘assets/detector/wb_net_2_bin.rpnproto‘ collided
  13. 修改ipa文件版本号
  14. 少儿编程scratch与机器人
  15. 36氪2022年Q3总收入同比增长两位数超预期,连续第四个季度盈利,广告收入同比增长20%
  16. Gate仿真配置安装--Linux系统
  17. Unity开发HTC vive 五、拾取和触碰
  18. 深度学习狗图片_狗品种分类的深度学习
  19. 【Usaco 2009 Feb】Bullcow 牡牛和牝牛
  20. 一文8个步骤从0到1实现Python+Selenium自动化测试项目实战【建议收藏】

热门文章

  1. Karel版本的nnet1
  2. Gd基金属有机骨架框架(Cd-MOF)磁共振造影剂/含氧化铁的超顺磁物质/影像对比剂/活体荧光造影剂
  3. arduino编乐谱_【Arduino】用Arduino编首小曲子吧
  4. 九方财富上市一度破发:公司市值80亿港元 9个月营收15亿
  5. CES, PW, PWE3
  6. 从世界五百强及中国五百强企业网站设计风格看当前WEB设计潮流
  7. WinRAR如何下载官方免费版
  8. 百度网盘BaiduYunCacheFileV0.db数据库研究
  9. avi通过文件读写方式实现剪切、拼接(不经过解码、编码)
  10. 算法的时间复杂度分析之O(logn)、O(nlogn)