之前开发一个微信公众好实时聊天的时候,由于项目需要,要求支持文字,文字+表情,图片,语音实时聊天,除了语音其他的还好说,可能第一次搞网页版语音聊天所以觉得麻烦吧,其实做完之后才发现并没有那么难,下面我讲解一下我遇到的问题:
主要的问题就是:
调用微信录音的问题,录完的音频文件存放在本地,也可以存到微信那边,但是微信那边只能存储几天,所以为了聊天的体验度,语音文件肯定不能放在微信那边。
于是我调用微信的录音接口,然后上传到自己的平台服务器,本想就大功告成,但是在html页面播放的时候才发现不能播放,原因是文件格式不支持,微信那边是.amr的格式, 而html不支持,所以另寻它路。
开始我寻思看看微信那边能不能直接录音成MP3格式的,但最后还是失败告别。
最后只能想着把amr格式的转成mp3的,开始我用的七牛云,但是七牛云的不怎么方便,所以决定试一下其他的办法,后来找到一个名为"ffmpeg"开源计算机程序,所以我决定用它来处理这个音频文件。开始我以为只要Linux的,但后面发下Window的也有。下面介绍下安装方法及使用吧。
基础命令:
1.将xxx.amr转成xxx.mp3
ffmpeg -i xxx.amr xxx.mp3
·
2.多个音频拼接为一个:
ffmpeg -i "concat:xxx1.mp3|xxx2.mp3|xxx3.mp3" -acodec copy xxx4.mp3
解释:
-i代表输入参数
contact:xxx1.mp3|xxx2.mp3|xxx3.mp3 代表着需要连接到一起的音频文件
-acodec copy xxx4.mp3 重新编码并复制到新文件xxx4.mp3中
·
3.多个合成为一个,比如给某用户录音添加背景音乐
ffmpeg -i xxx.mp3 -i xxxbg1.mp3 -i xxxbg2.mp3 -filter_complex amix=inputs=3:duration=first:dropout_transition=2 xxxsave.mp3
解释:
-i代表输入参数
-filter_complex ffmpeg滤镜功能
amix是混合多个音频到单个音频输出
inputs=3代表是3个音频文件,如果更多则代表对应数字
duration 确定最终输出文件的长度
longest(最长)|shortest(最短)|first(第一个文件)
dropout_transition
The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.
-f mp3 输出文件格式
xxxsave.mp3 保存文件
·
在代码中使用(这里演示的为php的用法):
$amr = $dirname.$filename; 源文件路径
$mp3 = $dirname.$name.'_wgc.mp3'; 保存路径
$command = "/usr/local/bin/ffmpeg -i $amr $mp3";
system($command,$error);
返回结果:
成功返回0,
失败(命令不存在等原因) 返回 非0值
安装方法:
window:
先去官网下载window版的ffmpeg, 把bin目录放到环境变量中,然后cmd,具体使用命令请自行百度
linux(centos),一般情况可以跳过:
安装依赖包
yum install -y automake autoconf libtool gcc gcc-c++
创建编译源码的目录
mkdir ~/ffmpeg_sources
编译&安装
Note: 如果您不需要特定的编码器,可以跳过相关部分,然后删除编译ffmpeg 时相应的./configure选项。例如,如果不需要libvorbis ,可以跳过这一节,然后从安装ffmpeg的部分去掉--enable-libvorbis
yasm:汇编器,新版本的ffmpeg增加了汇编代码
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0 && ./configure && make && make install
lame:Mp3音频解码
wget http://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar -xzvf lame-3.99.5.tar.gz
cd lame-3.99.5 && ./configure && make && make install
amr支持
wget http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz
tar -xzvf opencore-amr-0.1.3.tar.gz
cd opencore-amr-0.1.3 && ./configure && make && make install
amrnb支持
wget http://www.penguin.cz/~utx/ftp/amr/amrnb-11.0.0.0.tar.bz2
tar -xjvf amrnb-11.0.0.0.tar.bz2
cd amrnb-11.0.0.0 && ./configure && make && make install
amrwb支持
wget http://www.penguin.cz/~utx/ftp/amr/amrwb-11.0.0.0.tar.bz2
tar -xjvf amrwb-11.0.0.0.tar.bz2
cd amrwb-11.0.0.0 && ./configure && make && make install
x264
git clone https://code.videolan.org/videolan/x264.git
// 假设装在 xxx 目录下
./configure --disable-asm --enable-shared --enable-static --prefix=xxx
make && make install
// 然后在 xxx/share 下建一个 x264 目录,把 x264 源码目录下的 x264.pc 拷到 xxx/share/x264 下
export PKG_CONFIG_PATH=xxx/share/x264
如上操作需要注意安装目录哦,如果需要安装其他特定的编码器可以自行百度然后编译ffmpeg时加入相应的./configure选项##
###如果需要安装其他特定的编码器可以自行百度然后编译ffmpeg时加入相应的./configure选项
ffmpeg: 最好去官网下载最新的安装包 FFmpeg 使用最新版注意命令操作名称
wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
tar -xjvf ffmpeg-4.1.tar.bz2
cd ffmpeg-4.1
./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 -enable-shared --enable-libx264 --enable-gpl
make && make install
加载配置,最后写入config后,终端运行ffmpeg命令,出现success和已安装的扩展,则运行成功。
ldconfig
附录:
ffmpeg默认安装目录为“/usr/local/lib”,有些64位系统下软件目录则为“/usr/lib64”,编译过程中可能会出现
“ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory”等类似的错误,
解决办法是建立软链接:
ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0
其他问题自行百度吧