這裡的語音是指即時通訊中的語音頻息,語音邊錄邊傳就是在語音的錄製過程中上傳語音檔案而不是等錄製完成再一次性上傳,這麼做的目的是減少檔案上傳時間,加快訊息傳送速度。
一般一條語音頻息從使用者按下錄音鍵到成功傳送大致流程如下:
1 開始錄音,將接收到的語音轉化成音訊資料流,這一步通常可以呼叫系統方法完成(audiorecord)
2 編碼,將獲取到的音訊資料流進行編碼,不同格式的音訊編碼方式不同
3 將編碼好的資料寫入到檔案中,生成音訊檔案
4 將音訊檔案上傳到檔案儲存伺服器
5 將音訊檔案位址傳送給im伺服器,由im伺服器路由到接收方
6 接收到im伺服器的訊息回執,則一條語音頻息傳送成功
而實現邊錄邊傳是在生成音訊檔案的過程中判斷,當檔案大小每超過一片就通知上傳執行緒,從檔案中取出剛錄好的一片上傳到伺服器,而不是每片乙個檔案。當錄音完成時,我們得到的就是完整的乙個錄音檔案,個人認為這個做法非常的巧妙。附張簡單的流程圖,比較直觀
這裡有幾個點順便提一下:
1 這個流程涉及到兩個伺服器 一是檔案儲存伺服器,二是im的後台伺服器,檔案儲存伺服器負責儲存檔案,im伺服器負責即時訊息的路由
2 上傳檔案的獲取token這一步省略沒提,而實際專案中token管理也是值得注意的
3 需要檔案儲存伺服器支援檔案的分片上傳與合併
4 若中間任何一片上傳失敗或者合併失敗則認為分片失敗,這時需要將整個檔案上傳,這樣做確實會造成很多檔案碎片,但沒辦法,使用者體驗至上嘛
5 關於語音連發,比如錄滿60s語音後繼續錄音但前60s的語音要先發出去,這種情況只需要在寫音訊檔案這一步切換下就好了,而不需要重啟整個錄音流程...
邊生產邊消費實現
如何實現邊生產邊消費 首先定義乙個生產和消費的類,建立乙個生產函式,建立乙個消費函式。定義乙個容器用於裝載生產出來的產品,這裡我用乙個陣列當做乙個容器。定義乙個變數用於標識產品的個數。使用synchronized同步,使生產與消費的方法同時執行。定乙個消費執行緒b類,用於消費。定義乙個生產線程a類,...
vue 實現輸入框邊輸入邊驗證
這個方法是保留整數 inputchange e if o.value.tostring split 0 length 8 else 這個就是最後過來之後的值 this.value o.value 這個方法保留兩位小數 inputchange e obj.value obj.value.replace...
unity實現描邊效果
這裡總結了幾種在unity實現描邊效果的方法,首先準備乙個模型匯入在unity中,使用預設shader,上傳一張原始圖,以便後面實現功能效果的對比 一 邊緣光,這裡參照官方的乙個su ceshader example,rim lighting 1.在unity建立乙個su ceshader,命名ri...