菜鳥一個,正在學習。
我現在正在做一個通訊的軟體,想完成發送語音的功能,當前實作的方法是,使用
QAudioFormat format;
format.setSampleRate(8000); //設定采樣的赫茲
format.setChannelCount(1); //設定通道數通道 v//設定聲道數目,mono(平聲道)的聲道數目是1;stero(立體聲)的聲道數目是2
format.setSampleSize(16); //設定樣本大小,一般為8或者16
format.setCodec("audio/pcm");//設定編解碼器
format.setByteOrder(QAudioFormat::LittleEndian);//
format.setSampleType(QAudioFormat::UnSignedInt);//
...
QAudioInput * input;
QAudioOutput* output;
...
來將保存錄音,保存為raw格式的檔案,再轉換為wav格式的檔案進行播放,傳輸的時候想使用udp傳輸raw檔案的內容,接收方在保存并生成raw檔案,播放時也是轉為wav格式播放。但是有一個嚴重的問題,當錄音檔案過大時,udp傳輸就會丟包。導致傳輸失敗。但我還不想使用tcp。
請問有什么方法可以解決上述問題?
uj5u.com熱心網友回復:
發送語音訊息應該是用udp還是tcp呢?我的想法是,UDP發送吧必須要壓縮語音檔案內容,要不然容易丟包,不夠穩定。使用TCP吧,我認為太過于繁瑣,因為我想的是,客戶端又不像服務器會一直監聽自己的埠,因為我其他的資料傳輸都是使用的udp(文字,表情,圖片(圖片我是壓縮后發的,還沒實作點擊下載原圖的方式)),如果不一直監聽的話,僅因為發送語音檔案而去監聽,再建立連接我覺得過于麻煩。而且在我使用微信的時候發現,發送語音不能說的太久(好像最大只能到60秒),我猜測太久了,即便是壓縮了也會出現檔案過大的問題,使用UDP發送也會出現丟包的情況。
uj5u.com熱心網友回復:
我現在在想最好的方法就是在發送前壓縮要發送的語音檔案。因為之前從沒接觸過這類操作,一直不知道怎么下手,網上說可以使用lame庫編碼為MP3的格式,MP3格式的檔案應該小一點吧,但是我又不會,也沒能找到這個三方的lame庫。還希望有大佬幫幫孩子。uj5u.com熱心網友回復:
up up upuj5u.com熱心網友回復:
如果是檔案形式的非實時單工語音,可以用lame存成檔案。lame直接可以命令列呼叫。轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/281060.html
標籤:Qt
