背景分析
近年來,國內視頻監控應用發展迅猛,系統接入規模不斷擴大,涌現了大量平台提供商,平台提供商的接入協議各不相同,終端制造商需要給每款終端維護提供各種不同平台的軟件版本,造成了極大的資源浪費。各地視頻大規模建設后,省級、國家級集中調閱,對重特大事件通過視頻掌握現場並進行指揮調度的需求逐步涌現,然而不同平台間缺乏統一的互通協議。在這樣的產業背景下,基於終端標准化、平台互聯互通的需求,GB/T28181應運而生。
GB28181 web無插件播放
通過GB28181實現WEB端無插件播放已經有現成做的非常好的產品LiveGBS:https://www.liveqing.com/docs/products/LiveGBS.html 。這里主要介紹基於LiveGBS如何實現攝像頭語音對話、喊話功能。主要一步是觀看端要實現語音采集並回傳給攝像頭端。具體流程見https://blog.csdn.net/jinlong0603/article/details/99719962
前端頁面語音采集示例
function talkStart(e) {
if(this.recorder) {
return;
}
var $target = $(e.currentTarget);
LiveRecorder.get((rec, err) => {
if(err) {
alert(err);
return
}
this.muted_bak = this.muted;
this.$refs["player"].setMuted(true);
$target.addClass("active");
this.recorder = rec;
this.recorder.start();
}, {
sampleBits: 16,
sampleRate: 8000,
pcmCallback: pcm => {
if(this.bAudioSendError) return;
var reader = new window.FileReader();
reader.onloadend = () => {
var base64 = reader.result;
var base64 = base64.split(',')[1];
this.bAudioSending = true;
$.get("/api/v1/control/talk", {
serial: this.serial,
code: this.code,
audio: base64,
}).error(() => {
if(!this.bAudioSendError) {
this.bAudioSendError = true;
setTimeout(() => {
this.bAudioSendError = false;
}, 10000);
}
}).always(() => {
this.bAudioSending = false;
})
}
reader.readAsDataURL(pcm);
}
})
}
function talkStop() {
if(this.recorder) {
this.recorder.stop();
this.recorder = null;
$(this.$el).find(".fa-microphone.active, .ptz-talk.active").removeClass("active");
this.$refs["player"].setMuted(this.muted_bak);
return;
}
},
