這幾天小俠由於專案的需求,要實現後臺錄音。實現客服系統可以在後臺直接錄音然後上傳到伺服器。通過度娘做了些搜查,避免重複造輪子。主要是通過recorder.js的引入和呼叫。
----------------------------------------華麗分割線--------------------------------------------
首先說明下我的需求:
- 網頁線上錄音,並上傳到 後臺;
- 錄音開始,同時執行計時;
- 錄音結束,上傳錄音;
- 所有錄音場景結束,展示錄音列表並播放;
- 相容低版本瀏覽器;
github地址:github.com/jwagener-so…
直接上程式碼擼專案:
這部分是控制對應功能的程式碼範例
<div class="am-u-sm-10 am-u-sm-push-1">
<div class="am-btn-group">
<button type="button" class="am-btn am-btn-primary am-radius" onclick="record()">開始錄音</button>
</div>
<div class="am-btn-group">
<button type="button" class="am-btn am-btn-primary am-radius" onclick="play()">播放錄音</button>
</div>
<div class="am-btn-group">
<button type="button" class="am-btn am-btn-primary am-radius" onclick="stop()">停止錄音</button>
</div>
<div class="am-btn-group">
<button type="button" class="am-btn am-btn-primary am-radius" onclick="upload()">上傳錄音</button>
</div>
<span id="time">0:00</span>
</div>複製程式碼
在JS部分引入
{{--錄音編輯--}}
<script src="{{asset('ad')}}/assets/recorder.js"></script>複製程式碼
JS呼叫
<script>
//時間函式,用於計算時間
function timecode(ms) {
var hms = {
h: Math.floor(ms/(60*60*1000)),
m: Math.floor((ms/60000) % 60),
s: Math.floor((ms/1000) % 60)
};
var tc = []; // Timecode array to be joined with '.'
if (hms.h > 0) {
tc.push(hms.h);
}
tc.push((hms.m < 10 && hms.h > 0 ? "0" + hms.m : hms.m));
tc.push((hms.s < 10 ? "0" + hms.s : hms.s));
return tc.join(':');
}
//初始化錄音函式
Recorder.initialize({
//這裡的地址需要填寫對應swf地址
swfSrc: "{{asset('ad')}}/assets/recorder.swf"
});
//錄音呼叫方法
function record(){
Recorder.record({
start: function(){
//開始錄音時可以執行的方法
//alert("recording starts now. press stop when youre done. and then play or upload if you want.");
},
progress: function(milliseconds){
//錄音過程中呼叫對應時間函式
document.getElementById("time").innerHTML = timecode(milliseconds);
}
});
}
//播放方法
function play(){
Recorder.stop();
Recorder.play({
progress: function(milliseconds){
document.getElementById("time").innerHTML = timecode(milliseconds);
}
});
}
//停止方法
function stop(){
Recorder.stop();
}
//上傳回撥方法
function upload(){
Recorder.upload({
method: "POST",
url: "/service/up_record",
audioParam: "video",//這個欄位就是需要接收檔案的欄位
params: { // 這裡構造你需要的引數
"_token": '{{csrf_token()}}',
'id':'{{$topic->id}}',
'type':'40',
'name':'{{$topic->get_order_topic->title}}-{{$topic->get_order_info->ord_number}}'
},
success: function(msg){
//對應的返回的操作回撥
if(msg=="ok"){
//根據不同資訊展示對應的提示資訊
var $loding = $('#my-modal-loading');
$loding.modal('close');
var index = parent.layer.getFrameIndex(window.name); //先得到當前iframe層的索引
parent.layer.close(index); //再執行關閉
}else{
var $loding = $('#my-modal-loading');
$loding.modal('close');
alertshow('faile',msg)
}
}
});
}
</script>複製程式碼
以上就是本次案例總結就到這裡啦!如果可以幫你解決到開發的問題,記得關注我。