微信公众号录音文件保存到自己开发的服务器(amr文件转mp3)
音频转码工具,主要用于将微信语音 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 官方文档
原理
- 初始化时判断当前运行环境,将bin目录中对应的 ffmpeg 可执行文件拷贝到临时目录中
- 根据文件类型及配置通过 Runtime.getRuntime().exec(cmd) 执行 ffmpeg 对应的转码命令
JAVE 项目的问题
ffmpeg 是依赖运行环境的,JAVE 项目封装了ffmpeg,它通过上述的原理使 java 可以调用ffmpeg而且支持跨平台。
- 项目老旧没再维护。官网最近版本是2009年发布的,其依赖的ffmpeg早已过时,很多情况下用不了。
- 转码一直报异常 EncoderException: Stream mapping
- 没有发布maven仓库,而且 JAVE 本身也不是一个maven项目
- 不支持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)相关推荐
- (Java篇)爬取微信公众号文章并保存为 PDF 格式
前言 背景: 某一天,拿着自己的手机看着技术文章,然而手机看技术文章,有时候确实蛋疼,因为一旦代码多起来,小屏幕看的还是眼花:又或者某一天觉得这一篇文章,觉得写的很棒棒哦,于是先收藏,打算过几天看,然 ...
- 微信公众号文章批量保存到本地的方法
其他不多说,直接入主题,目前比较常见的保存微信文章的方法有以下几种,简要分析如下: 1. 手动保存 微信登陆电脑客户端,用自带浏览器打开微信公众号文章,然后选择,复制,粘贴到Word里,进行保存. 这 ...
- 微信公众号支付java前后端分离开发
微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付,支付宝微信都做了,这里就介绍一下微信公众号支付,这个公众号支付需要配置的东西太多了,官方文档 ...
- 微信公众号报修系统常见通用功能开发
微信公众号报修系统常见通用功能开发 51报修系统是一款基于微信的用户报修.维修师傅接单.公司进行管理的一站式维修服务平台,实现报修.派单.接单.支付.评价.回访等功能.涵盖了各类生活维修服务,包括水电 ...
- python爬取正确但不出文件_使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...
前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...
- 微信公众号如何设置关键词回复Word/Excel/pdf/ppt等文件?
大家好,我是运营小薇老师,今天给大家带来的课程是:<公众号如何设置关键词回复指定文件>,各位同学要认真听讲哦! 各位同学,大家都知道微信公众号有一个自动回复的功能,看看公众号后台,它可以设 ...
- 向微信公众号文章中添加mp4、rar、zip等文件给用户下载
现在随着微信公众号的使用率越来越高 大家对公众号的功能需求也越来越广 假如想在文章中添加一个MP4.rar.zip等压缩文件 让用户来浏览.下载.编辑,就需要通过微附件小程序来实现了 使用微附件小 ...
- 将微信公众号的文章保存到本地pdf
关注机器之心有一段时间了,推送的文章质量非常高. 我习惯于在pdf上边看边批注,就需要把公众号的文章保存为pdf. 那么,如果直接全选复制粘贴,文字没问题,但是图片无法复制下来. 方法是, 1. 用电 ...
- 基于微信公众号的答题投票系统——项目开发心得体会记录
项目背景 项目需求 后台管理功能 用户功能 页面展示 项目信息 开发语言 数据库 项目构想 获取幸运用户 用户答题 项目反思 项目进度的安排 团队合作沟通方面 项目的构建 技术 本地开发和上线的模式区 ...
最新文章
- 很好的理解梯度 散度 旋度 下三角运算 费曼物理讲义
- 鼠标移出DIV层时,触发onMouseOut事件
- python怎么读write_Python如何读写文件?python写入文件读写操作详解
- matlab和vs2008联合编程
- 【贪心】Vijos P1615 旅行
- python文件读写方法手机,python文本文件读写的3种方法
- python中list的切片和range函数
- 通过反射调用方法会大大降低性能
- 【工具】(七):win10常用工具整理!!!
- Redis最大内存配置
- 关于注意力的自上而下和自下而上(top-down attention and bottom-up attention)
- 腾讯云人脸识别 报错 Entry name ‘assets/detector/wb_net_2_bin.rpnproto‘ collided
- 修改ipa文件版本号
- 少儿编程scratch与机器人
- 36氪2022年Q3总收入同比增长两位数超预期,连续第四个季度盈利,广告收入同比增长20%
- Gate仿真配置安装--Linux系统
- Unity开发HTC vive 五、拾取和触碰
- 深度学习狗图片_狗品种分类的深度学习
- 【Usaco 2009 Feb】Bullcow 牡牛和牝牛
- 一文8个步骤从0到1实现Python+Selenium自动化测试项目实战【建议收藏】
热门文章
- Karel版本的nnet1
- Gd基金属有机骨架框架(Cd-MOF)磁共振造影剂/含氧化铁的超顺磁物质/影像对比剂/活体荧光造影剂
- arduino编乐谱_【Arduino】用Arduino编首小曲子吧
- 九方财富上市一度破发:公司市值80亿港元 9个月营收15亿
- CES, PW, PWE3
- 从世界五百强及中国五百强企业网站设计风格看当前WEB设计潮流
- WinRAR如何下载官方免费版
- 百度网盘BaiduYunCacheFileV0.db数据库研究
- avi通过文件读写方式实现剪切、拼接(不经过解码、编码)
- 算法的时间复杂度分析之O(logn)、O(nlogn)