目录音频转码工具原理JAVE 项目的问题本项目特点扩展音频转码工具,主要用于将微信语音 amr 格式转换为 mp3 格式以便在 HTML5 的 audio 标签中进行播放 1.调用
音频转码工具,主要用于将微信语音 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 对应的转码命令
ffmpeg 是依赖运行环境的,JAVE 项目封装了ffmpeg,它通过上述的原理使 java 可以调用ffmpeg而且支持跨平台。
本项目为解决上述问题而生。
如果程序无法通过拷贝资源文件的方式获取到 ffmpeg 的可执行文件或者内置的 ffmpeg 不支持你所使用的操作系统
你可以通过环境变量或者在 java 中设置 System.setProperty("ffmpeg.home", "ffmpeg可执行文件所在的目录") 的方式指定你的系统中安装的可用的 ffmpeg 文件的目录
如 System.setProperty("ffmpeg.home", "/usr/local/bin/")
到此这篇关于微信公众号录音文件的播放与保存(amr文件转mp3)的文章就介绍到这了,更多相关微信公众号录音内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 微信公众号录音文件的播放与保存(amr文件转mp3)
本文链接: https://lsjlt.com/news/132404.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0