準備做一個網頁版聊天界面,表情啊、圖片啊、上傳文件啊都應該要有,視頻就算了,語音還是要的。
本文記錄的是在網頁上用GitHub上的Recorder進行在線錄音和上傳到服務器,前幾天升了一下級,以后有時間再專門寫一篇記錄。
錄音代碼 本示例代碼支持PC、Android、IOS(僅Safari)中使用,如果用RecordApp可增加對IOS(微信瀏覽器、小程序)的支持。 看萬遍代碼不如行動一遍,新建一個html文件,把下面三段代碼復制到文件內,雙擊瀏覽器打開就能進行測試。 <!-- 先加載js錄音庫,注意:你應該把js clone到本地使用 --><meta charset="utf-8" />
<script src="https://xiangyuecn.github.io/Recorder/recorder.mp3.min.js"></script>
<input type="button" onclick="startRec()" value="開始錄音">
<hr>
<input type="button" onclick="playRec()" value="結束并播放">
<input type="button" onclick="uploadRec()" value="結束并上傳">
<script>
var rec;
function startRec(){
rec=Recorder();//使用默認配置,mp3格式 //打開麥克風授權獲得相關資源
rec.open(function(){
//開始錄音
rec.start();
},function(msg,isUserNotAllow){
//用戶拒絕了權限或瀏覽器不支持
alert((isUserNotAllow?"用戶拒絕了權限,":"")+"無法錄音:"+msg);
});
};
</script> 上傳服務器代碼 <script>
function uploadRec(){
//停止錄音,得到了錄音文件blob二進制對象,想干嘛就干嘛
rec.stop(function(blob,duration){
/*
blob文件對象,可以用FileReader讀取出內容
,或者用FormData上傳,本例直接上傳二進制文件
,對于普通application/x-www-form-urlencoded表單上傳
,請參考github里面的例子
*/
var form=new FormData();
form.append("upfile",blob,"recorder.mp3"); //和普通form表單并無二致,后端接收到upfile參數的文件,文件名為recorder.mp3 //直接用ajax上傳
var xhr=new XMLHttpRequest();
xhr.open("POST","http://baidu.com/修改成你的上傳地址");//這個假地址在控制臺network中能看到請求數據和格式,請求結果無關緊要
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
alert(xhr.status==200?"上傳成功":"測試請先打開瀏覽器控制臺,然后重新錄音,在network選項卡里面就能看到上傳請求數據和格式了");
}
}
xhr.send(form);
},function(msg){
alert("錄音失敗:"+msg);
});
};</script> 立即播放代碼 <script>
function playRec(){
//停止錄音,得到了錄音文件blob二進制對象,想干嘛就干嘛
rec.stop(function(blob,duration){
var audio=document.createElement("audio");
audio.controls=true;
document.body.appendChild(audio); //非常簡單的就能拿到blob音頻url
audio.src=URL.createObjectURL(blob);
audio.play();
},function(msg){
alert("錄音失敗:"+msg);
});
};</script> Recorder
GitHub地址:https://github.com/xiangyuecn/Recorder
在線測試: https://xiangyuecn.github.io/Recorder/
Recorder用于html5錄音,為一個純粹的js庫,支持大部分已實現getUserMedia的移動端、PC端瀏覽器,包括騰訊Android X5內核(QQ、微信)。
錄音默認輸出mp3格式,另外可選wav格式(此格式錄音文件超大);有限支持ogg、webm、amr格式;支持任意格式擴展(前提有相應編碼器)。
小巧:如果對錄音文件大小沒有特別要求,可以僅僅使用錄音核心+wav編碼器,源碼不足300行,壓縮后的recorder.wav.min.js不足4kb。mp3使用lamejs編碼,壓縮后的recorder.mp3.min.js開啟gzip后54kb。
由于IOS(11.X、12.X)上只有Safari支持getUserMedia,其他瀏覽器均不支持H5錄音,因此額外針對IOS對Recorder進行了進一步的兼容封裝,升級成了RecordApp,用于支持微信(含瀏覽器、小程序web-view),另外RecordApp對Hybrid App也提供了更加優秀的支持。