微信公众号开发——通过ffmpeg解决amr文件无法播放问题
今天刚好碰到个需求,要在微信浏览器中实现录音,并在其他页面上播放。录音功能本身是JS SDK
的功能,倒没啥问题,然而录音的文件保存下来是amr
格式,而IOS
的浏览器没法播放amr
(据说微信浏览器的video
标签可以播放,但没试成功),只能考虑在上传后自动将amr
转换成mp3
。问题本身不大,但是根据搜索的文章操作时却遇到不少问题,故记录下来。
服务端系统是CentOS
,语言是PHP
,实现这个过程主要就两步:
- 安装
ffmpeg
(确保ffmpeg
与ffprobe
命令可用) -
PHP
通过php-ffmpeg
实现amr
转换成mp3
;
安装ffmpeg
在CentOS
上,最简单的办法是去官网(http://www.ffmpeg.com/
)上下载最新的静态版本(Linux Static Builds
),解压后即可使用。
如果通过
yum
安装会发现版本过低,转换不成功;而自己编译那就有得折腾了。
不论通过什么方式,安装成功后,都应该找个amr
文件,测试下是否能转换成功:
$ffmpeg -i test.amr test.mp3
实现amr转换成mp3
需求比较简单,可以自己调用exec
命令实现转换,也可以使用第三方库完成转换,我使用的是PHP-FFMpeg
(https://github.com/PHP-FFMpeg/PHP-FFMpeg)这个库。
安装与引用包是Composer
的基础知识,也是现代WEB开发
的基础,这里就不展开了。
一切就绪后,通过以下的例子代码就能完成amr
到mp3
的转换:
$ffmpeg = FFMpeg\FFMpeg::create();
$amr = $ffmpeg->open("test.amr");
$audio_format = new FFMpeg\Format\Audio\Mp3();
$amr->save($audio_format, "test.mp3");