VUE+SPRINGBOOT從0-1打造前后端-前后臺系統-會議記錄

在當今快節奏的工作環境中,會議記錄是每個職場人士都必須要面對的任務。傳統的手動記錄方式不僅效率低下,而且容易遺漏重要信息。隨著Web技術的發展,基于瀏覽器的實時語音轉寫技術為會議記錄提供了全新的解決方案。本文將詳細介紹如何利用WebSocket、WebRTC和訊飛開放平臺的實時語音轉寫API,構建一個高效的會議記錄系統。

一、系統架構概述

我們的會議記錄系統主要包含以下幾個核心模塊:

  1. 前端界面:基于Vue.js框架構建的用戶界面

  2. 錄音模塊:使用Recorder.js實現瀏覽器端語音采集

  3. 實時傳輸模塊:基于WebSocket協議的語音數據傳輸

  4. 語音轉寫模塊:對接訊飛開放平臺的實時語音轉寫服務

  5. 結果展示模塊:實時顯示轉寫結果的文本區域

系統工作流程如下:

  1. 用戶點擊"長時會議記錄"按鈕開始錄音

  2. 系統建立WebSocket連接并開始采集語音

  3. 語音數據通過WebSocket實時傳輸到轉寫服務

  4. 轉寫結果實時返回并顯示在文本區域

  5. 用戶點擊"停止記錄"按鈕結束整個過程

二、關鍵技術實現

1. 語音采集與處理

我們使用Recorder.js庫來實現瀏覽器端的語音采集功能。這是一個輕量級的JavaScript庫,支持多種音頻格式的錄制和處理。

let recorder = new Recorder("../../recorder")
recorder.start({sampleRate: 16000,frameSize: 1280,
});

關鍵參數說明:

  • sampleRate: 采樣率設置為16000Hz,這是語音識別常用的采樣率

  • frameSize: 每幀大小設置為1280字節,平衡實時性和網絡負載

錄音過程中,我們通過onFrameRecorded回調函數處理音頻數據:

recorder.onFrameRecorded = ({isLastFrame, frameBuffer}) => {if (!isLastFrame && wsFlag) {wsTask.send(new Int8Array(frameBuffer))} else {if (wsFlag) {wsTask.send('{"end": true}')}}
}

這種分幀傳輸的方式確保了語音數據的實時性,同時減輕了網絡壓力。

2. WebSocket連接管理

WebSocket是實現實時通信的關鍵技術。我們封裝了WebSocket的初始化和管理邏輯:

async wsInit() {let reqeustUrl = await this.getWebSocketUrl()wsTask = new WebSocket(reqeustUrl);wsTask.onopen = function() {wsFlag = truerecorder.start({sampleRate: 16000,frameSize: 1280,});}wsTask.onmessage = function(message) {this.renderResult(message.data)}// 其他事件處理...
}

需要注意的是,WebSocket連接需要處理各種狀態變化和異常情況,包括連接建立、消息接收、連接關閉和錯誤處理等。

3. 訊飛API鑒權與連接

與訊飛開放平臺的連接需要進行鑒權,我們實現了完整的鑒權流程:

getWebSocketUrl() {var appId = atob(this.user.appid);var secretKey = "861ae0b4f7d7c1c0875a4b7153d9997d";var ts = Math.floor(new Date().getTime() / 1000);var signa = hex_md5(appId + ts);var signatureSha = CryptoJSNew.HmacSHA1(signa, secretKey);var signature = CryptoJS.enc.Base64.stringify(signatureSha);signature = encodeURIComponent(signature);return `${this.URL}?appid=${appId}&ts=${ts}&signa=${signature}`;
}

鑒權過程包括:

  1. 獲取應用ID和密鑰

  2. 生成時間戳

  3. 計算簽名

  4. 構造完整的WebSocket連接URL

4. 轉寫結果處理

訊飛API返回的轉寫結果需要經過解析才能顯示給用戶:

renderResult(resultData) {let jsonData = JSON.parse(resultData);if (jsonData.action == "result") {const data = JSON.parse(jsonData.data)let resultTextTemp = ""data.cn.st.rt.forEach((j) => {j.ws.forEach((k) => {k.cw.forEach((l) => {resultTextTemp += l.w;});});});if (data.cn.st.type == 0) {this.text += resultTextTemp;}}
}

結果處理邏輯解析了訊飛API返回的JSON結構,提取出實際的轉寫文本并追加到顯示區域。

三、前端界面設計

系統界面簡潔實用,主要包含以下幾個部分:

<div class="Meeting-container"><!-- 轉寫結果顯示區域 --><textarea v-model="text"placeholder="請點擊長時會議記錄,會把會議說的話記錄成文字,方便會后整理紀要"style="height: 560px;"></textarea><!-- 控制按鈕 --><div><el-button @click="voiceSend"><i class="el-icon-microphone"></i>長時會議記錄</el-button><el-button @click="stopVoice">停止記錄</el-button></div>
</div>

界面設計考慮點:

  1. 大文本區域方便查看長文本內容

  2. 醒目的操作按鈕

  3. 簡潔的提示信息

  4. 響應式布局適應不同設備

四、系統優化與擴展

1. 性能優化

  • 音頻數據處理優化:使用TypedArray處理二進制數據,提高處理效率

  • 網絡傳輸優化:合理設置分幀大小,平衡實時性和網絡負載

  • 內存管理:及時清理不再需要的音頻數據,避免內存泄漏

2. 功能擴展

  • 多語言支持:擴展支持英語等其他語言的轉寫

  • 說話人分離:識別不同說話人并標注

  • 關鍵詞標記:自動識別并標記會議中的關鍵信息

  • 云端存儲:將轉寫結果自動保存到云端

3. 錯誤處理與日志

完善的錯誤處理機制:

wsTask.onerror = function() {console.log('發生錯誤...')// 可以添加更詳細的錯誤處理和用戶提示this.$message.error("連接發生錯誤,請檢查網絡后重試");
}

建議添加日志記錄功能,便于問題排查和系統維護。

五、部署與使用指南

1. 系統部署

  1. 準備Web服務器(如Nginx)

  2. 部署前端代碼

  3. 配置HTTPS(WebRTC和WebSocket通常需要安全上下文)

  4. 配置域名和SSL證書

2. 使用說明

  1. 打開系統頁面

  2. 點擊"長時會議記錄"按鈕開始

  3. 系統會提示"已開始記錄會議..."

  4. 進行正常會議,系統會自動轉寫語音

  5. 會議結束后點擊"停止記錄"按鈕

  6. 復制或導出轉寫結果

六、常見問題與解決方案

  1. 瀏覽器兼容性問題

    • 解決方案:明確說明支持的瀏覽器及版本,提供檢測腳本

  2. 麥克風權限問題

    • 解決方案:添加明確的權限請求提示和引導

  3. 網絡不穩定導致中斷

    • 解決方案:實現自動重連機制和斷點續傳

  4. 長時錄音的內存問題

    • 解決方案:定期清理緩存,添加內存監控

結語

本文詳細介紹了一個基于Web技術的實時語音會議記錄系統的設計與實現。通過結合WebSocket、WebRTC和語音識別API,我們構建了一個高效、實用的會議輔助工具。系統具有良好的實時性和可用性,能夠顯著提高會議記錄的效率和質量。

未來,我們可以進一步擴展系統的功能,如添加編輯標記、智能摘要生成、多設備同步等功能,使其成為更完善的會議協作平臺。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918701.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918701.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WEB3——水龍頭,如何獲得開發用的測試幣、 Sepolia 測試幣?

注意&#xff1a; 有些水龍頭渠道&#xff0c;要求以太坊幣至少有0.01ETH,設有這個門檻&#xff0c;下面并不是所有渠道都能領取到測試幣&#xff0c;有些可能對領取測試幣有要求&#xff0c;如果想獲得獲取以太坊幣的方法&#xff0c;可以看我其他的文章。 本文整理了多個免費…

C++調試革命:時間旅行調試實戰指南

還在為C的懸垂指針、內存泄漏和并發競態抓狂&#xff1f;讓調試器學會“時光倒流” 凌晨三點&#xff0c;std::thread創建的六個線程中有一個突然吞掉了你的數據&#xff0c;valgrind只告訴你“Invalid read”&#xff0c;而時間旅行調試&#xff08;TTD&#xff09;?? 能讓你…

mysql8.0筆記

1.DDL數據定義語言 DDL是什么——————創建、修改、刪除 數據庫和表結構的命令。 基本語法 針對數據庫的操作 -- 創建數據庫 CREATE DATABASE 數據庫名; -- 比如 CREATE DATABASE myschool; --查看所有數據庫 SHOW DATABASES; --使用某個數據庫 USE myschool; -- 刪除數據庫…

大模型微調【1】之入門

文章目錄說明一 大模型微調技術1.1 微調基礎1.2 量化概念1.3 高效微調方法LoRA&QLoRA1.4 LoRA VS QLoRA1.5 高效微調的應用場景二 主流微調工具2.1 unsloth2.2 LLama-Factory2.3 ms-SWIFT2.4 ColossalAI2.5 底層微調框架推薦2.6 模型性能評估框架EvalScope三 微調所需軟硬件…

深入解析Linux poll()系統調用

&#x1f504; Linux poll() 系統調用詳解一、poll 是干什么的&#xff1f;poll 是 Linux&#xff08;及 POSIX 標準&#xff09;中用于實現 I/O 多路復用&#xff08;I/O Multiplexing&#xff09; 的系統調用&#xff0c;它的核心作用是&#xff1a;讓一個線程能夠同時監視多…

文獻閱讀 | PLoS ONE | SRplot:一個免費的在線平臺,用于數據可視化和圖形

文獻介紹文獻題目&#xff1a; SRplot&#xff1a;一個免費的在線平臺&#xff0c;用于數據可視化和圖形 研究團隊&#xff1a; Yewei Wang&#xff08;中南大學湘雅二醫院&#xff09; 發表時間&#xff1a; 2023-11-09 發表期刊&#xff1a; PLoS ONE 影響因子&#xff1a; 3…

分布式與微服務寶典

分布式理論基礎 1、分布式架構有哪些特點&#xff0c;優勢和缺陷 特點&#xff1a;微服務架構的優點微服務架構的缺陷自由使用不同技術增加故障排除挑戰每一個微服務都側重于單一功能由于遠程調用增加延遲支持單個可部署單元增加了配置與其他操作的工作量允許經常發布軟件難以保…

利用生成式AI與大語言模型(LLM)革新自動化軟件測試 —— 測試工程師必讀深度解析

引言 自動化測試是現代軟件工程的基石&#xff0c;然而&#xff0c;隨著軟件復雜度和迭代速度的飛速提升&#xff0c;傳統自動化測試方法正面臨越來越多的挑戰。 近年來&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;和大語言模型&#xff08;LLM&#xff0…

JS 與 C++ 雙向通信實戰:基于 WebHostViewListener 的消息處理機制

前言在現代瀏覽器和桌面應用開發中&#xff0c;WebView 嵌入已經成為一種非常常見的 UI 技術方案。無論是基于 Chromium 的 CEF&#xff08;Chromium Embedded Framework&#xff09;、Qt WebEngine&#xff0c;還是自研瀏覽器內核&#xff0c;嵌入 WebView 都能帶來極高的靈活…

模板打印技術——Office XLS 打印模板:為政務土地確權定制的紙張替換利器—仙盟創夢IDE

代碼public static int cyberwin_replaceExcelandoutputPrint(string fisrcpathleurl, DataTable dtInfo, string despath){if (File.Exists(despath) true){//刪除目標文件File.Delete(despath);}File.Copy(fisrcpathleurl, despath);string 目標文件 despath;MSEXCEL.Appli…

可直接運行的 Playwright C# 自動化模板

目錄 目錄結構 1. appsettings.json&#xff08;賬號、URL、路徑配置&#xff09; 2. Program.cs&#xff08;啟動入口&#xff09; 3. SchedulerConfig.cs&#xff08;定時調度&#xff09; 4. SocialSecurityTask.cs&#xff08;自動報社保任務&#xff09; 5. QuerySo…

云平臺監控-云原生環境Prometheus企業級監控實戰

目錄 一、基于 Kubernetes 的 Prometheus 監控方案概述 1. 核心組件及功能 2. 監控流程詳解 3. 關鍵監控指標說明 二、Prometheus 與相關組件部署 1. 克隆項目代碼 2. 安裝 Prometheus Operator 3. 安裝 Prometheus Stack 4. 查看容器運行狀態 三、ServiceMonitor 配…

GPT-5 有點不太順

GPT-5 有點不太順 OpenAI 的新模型 GPT-5 盼了很久,結果一上線就問題不少。 發布會剛過,CEO 山姆?奧特曼就說,要給部分用戶恢復 GPT-4o 這些老模型的使用權限,還承認 GPT-5 上線 “比預想的坎坷”。 簡單題都做錯了 不少用戶發現,GPT-5 連一些簡單問題都答不對,比之前…

《卷積神經網絡(CNN):解鎖視覺與多模態任務的深度學習核心》

1.概述卷積神經網絡&#xff08;CNN&#xff09;是深度學習在計算機視覺領域的重要突破&#xff0c;專為處理網格狀數據&#xff08;如圖像&#xff09;設計&#xff0c;后也擴展到自然語言處理等領域。它解決了全連接網絡處理大圖像時計算代價高、特征保留差的問題&#xff0c…

React Native + Expo搭建APP項目+安卓模擬器

Expo 嘗試一下就好&#xff0c;畢竟參考代碼太少&#xff0c;相當于閉關造輪子&#xff0c;不建議。 一、需要的工具 1. node.js&#xff0c;推薦使用&#xff08;TLS版本&#xff09;&#xff0c;版本不是太低就行&#xff0c;測試用的v20.12.2的Node 2. 開發工具 VS CODE或…

第六十五章:AI的“精良食材”:圖像標注、視頻幀抽幀與字幕提取技巧

ai 數據處理前言&#xff1a;從“原始食材”到“AI盛宴”第一章&#xff1a;圖像標注&#xff1a;為AI“指點江山”1.1 什么是圖像標注&#xff1f;—— AI的“視覺標簽”1.2 分類任務&#xff1a;圖像的“身份識別”1.3 目標檢測&#xff1a;圖像的“區域識別”與“邊界框”1.…

2025 開源語音合成模型全景解析:從工業級性能到創新架構的技術圖譜

一、引言&#xff1a;開源浪潮下的語音合成技術躍遷 語音合成&#xff08;TTS&#xff09;作為人工智能領域的核心技術&#xff0c;近年來在開源社區的推動下取得了突破性進展。從早期的基于規則的拼接合成&#xff0c;到深度學習驅動的端到端模型&#xff0c;再到當前與大語言…

前端懶加載技術全面解析

懶加載(Lazy Loading)是一種優化前端性能的重要技術,核心思想是延遲加載非關鍵資源,只在需要時加載它們。 一、懶加載的基本原理 懶加載的核心思想是通過以下方式優化性能: 減少初始加載實踐: 只加載首屏所需資源 節省帶寬和內存: 避免加載用戶可能不會查看的內容 提高…

B3DM,OSGB,PLY,OBJ,S3MB,I3S這幾種格式有什么區別

B3DM、OSGB、PLY、OBJ、S3MB、I3S 都是三維模型/地理空間數據的文件格式&#xff0c;但它們的用途、結構和適用場景差別很大。1. B3DM&#xff08;Batched 3D Model&#xff09;來源/用途&#xff1a;屬于 Cesium 3D Tiles 規范&#xff0c;用于在 Cesium、Mapbox 這種 WebGIS …

Matlab(4)

一、Basic plotting1.plot&#xff08;&#xff09;plot(x,y) &#xff1a;x圖片中點的橫坐標&#xff0c;y圖片中點的縱坐標plot(y) &#xff1a;y圖片中點的縱坐標&#xff0c;x圖片中點的橫坐標默認為1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5........plot(co…