1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信小程序上传silk格式录音并转码为mp3

微信小程序上传silk格式录音并转码为mp3

时间:2022-08-25 15:18:22

相关推荐

微信小程序上传silk格式录音并转码为mp3

单纯限制了我对小程序坑爹的想象

最近写录音功能时候又验证了一次;

其中的辛酸泪;

不搞过是不会懂的;

为了让后面的童鞋少走点弯路;

于是就有了这篇文章;

先来说下我们的目标;

我们要让用户录音;

然后把录音上传到服务器;

管理员可以在后台听录音;

以及进一步对录音处理;

小程序是开放了录音api的;

这个翻开发文档是可以找到的;

同时还有一个上传文件的接口;

这两个以配合不就轻松实现了?

刚开始的时候我也是这么年轻;

当我开始搞起的时候才发现是多森破;

首先我们需要调用wx.stopRecordapi开始录音;

然后调用wx.stopRecordapi结束录音;

success回调方法中可以得到tempFilePath;

这是一个录音生成的临时文件路径;

用console.log打印的话是下面这个样子;

调用wx.uploadFileapi;

filePath就是上面的这个tempFilePath

这样就可以把录音上传到自己服务器了;

霎时心情愉悦踱起了魔鬼的步伐开始摩擦摩擦;

然而如果就这么轻松的搞定的话;

那就没法说坑了;

因为这个音频文件根本不是什么mp3等常见通用格式;

再认真一看会发现这个文件是silk格式;

百之谷之必应之;

原来是skype的音频转码格式;

那就找个转码的方案吧;

于是在全球最大的同性交友网站github上找到了silk-v3-decoder;

然后就发现silk-v3-decoder依赖ffmpeg

又于就又去安装ffmpeg

又然后发现想用ffmpegmp3需要先安装lame;

下载lame

wget /lame/lame-3.100.tar.gz

Bash

Copy

解压

tar -zxvf lame-3.100.tar.gzcd lame-3.100

Bash

Copy

编译安装

./configure --prefix=/usr/localmakemake install

Bash

Copy

如果是64位的系统;

需要增加一个软连接;

ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0

Bash

Copy

下载 ffmpeg

wget /releases/ffmpeg-3.4.1.tar.bz2

Bash

Copy

解压

tar -jxvf ffmpeg-3.4.1.tar.bz2

Bash

Copy

编译安装

cd ffmpeg-3.4.1./configure --prefix=/usr/local --pkg-config-flags=--static --enable-libmp3lame --disable-x86asmmakemake install

Bash

Copy

剩下的就简单了;

下载 silk-v3-decoder

cd /optwget /kn007/silk-v3-decoder/archive/master.zip

Bash

Copy

解压

unzip master.zipmv silk-v3-decoder-master silk-v3-decoder

Bash

Copy

给予执行权限

chmod -R +x /opt/silk-v3-decoder/

Bash

Copy

然后就可以调用命令了;

/opt/silk-v3-decoder/converter.sh file mp3'

Bash

Copy

心想折腾这么大半天了;

终于可以转码了吧;

没想到又森破了;

上来就是一个失败;

又于是用编辑器打开上传的silk文件;

发现是下面这个样子的;

原来是用base64转码了;

还好世界上最好的语言php解决这个问题so easy;

// $file 是 silk文件路径 删掉前面的加密说明$base64 = str_replace('data:audio/webm;base64,', '', file_get_contents($file));// 转码$content = base64_decode($base64);// 把转码后的内容存入文件file_put_contents($file, $content);

PHP

Copy

转码后再打开应该是这个样子的;

再然后写个方法用php调用silk-v3-decoder;

/*** 把 silk 转成MP3** @param $file** @return mixed*/function silkToMp3($file){set_time_limit(0);$path = $_SERVER['DOCUMENT_ROOT'] . '/Upload/record/' . $file;$command = '/usr/bin/sh /opt/silk-v3-decoder/converter.sh ' . $file . ' mp3';exec($command, $result);return $result;}

PHP

Copy

大舒一口气总算是搞完了;

可没想到还是森破了;

使用开发工具录音生成的是base64转码后的silk文件;

在真机中使用微信录音上传的silk是未被转码的;

于是最好做个判断;

判断文件中如果含有data:audio/webm;base64

那就使用base64转码;

如果没有则不需要转了;

最后再说一些需要注意的地方;

小程序api的request请求最长时间为60秒;

还有就是调试的时候先在系统中通过命令行使用 silk-v3-decoder;

成功后再用php调用;

如果转码失败可以查看 silkToMp3 的返回值;

里面有错误的原因;

我是一条分割线 - - -

补充: 现在小程序可以直接录制 mp3 了;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。