国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

重磅重構開源 讓H5標簽代替C++實時解碼播放speex壓縮協議的音頻文件 【IM的福音】

curried / 3041人閱讀

摘要:編碼結束后,調用函數,來銷毀和編碼器。調用函數對參數中的格式音頻數據幀進行解碼,參數中存放解碼后的音頻數據幀。調用函數來銷毀和解碼器說重點當做即時通信產品,像微信這種的手機端,它們接受到很有可能就是協議壓縮后的音頻文件。

這么牛逼的輪子,肯定要美圖鎮樓
Speex是一套主要針對語音的開源免費,無專利保護的音頻壓縮格式。
本輪子,適用超大型項目,因為庫本身很大,當然本身IM項目就沒有小項目吧

Speex(音標[spi:ks])是一套開源免費的、無專利保護的、針對語音設計的音頻壓縮格式。Speex項目通過以提供昂貴的專用語音編解碼器的免費替代方案為目標,來降低語音應用程序的進入門檻。此外,Speex非常適用于互聯網應用程序,并提供了其他大多數編解碼器中不存在的有用特性。最后,Speex是GNU項目的一部分,可以在修訂后的BSD許可證下使用。

編碼流程

使用SpeexAPI函數對音頻數據進行壓縮編碼要經過如下步驟:

定義一個SpeexBits類型變量bits和一個Speex編碼器的內存指針變量enc。

調用speex_bits_init(&bits)函數初始化bits。

調用enc = speex_encoder_init(&speex_nb_mode)函數初始化enc。其中speex_nb_modeSpeexMode類型的變量,表示的是窄帶模式。還有speex_wb_mode表示寬帶模式、speex_uwb_mode表示超寬帶模式。

調用函數 int speex_encoder_ctl(void * state, int request, void * ptr)來設定編碼器的參數,其中參數state表示編碼器的內存指針;參數request表示要定義的參數類型,如SPEEX_GET_FRAME_SIZE表示設置幀大小,SPEEX_SET_QUALITY表示編碼的質量等級;參數ptr表示要設定的值。

初始化完畢后,對每一幀聲音作如下處理:調用函數speex_bits_reset(&bits)重置bits,然后調用函數speex_encode(enc_state,input_frame, &bits)進行編碼,參數bits中保存編碼后的Speex格式數據幀。

編碼結束后,調用函數speex_bits_destroy(&bits),speex_encoder_destroy(enc_state)來銷毀SpeexBits和編碼器。

解碼流程

對已經編碼過的Speex格式音頻數據幀進行解碼要經過以下步驟:

定義一個SpeexBits類型變量bits和一個Speex解碼器的內存指針變量dec

調用speex_bits_init(&bits) 函數初始化bits。

調用dec = speex_decoder_init(&speex_nb_mode) 函數初始化dec。

調用函數speex_decoder_ctl(void * state, int request, void * ptr)來設定解碼器的參數。

調用函數 speex_decode(void * state, SpeexBits * bits, float * out)對參數bits中的Speex格式音頻數據幀進行解碼,參數out中存放解碼后的音頻數據幀。

調用函數speex_bits_destroy(&bits), speex_decoder_destroy(void * state)來銷毀SpeexBits和解碼器

說重點
當做即時通信產品,像微信這種的手機端,它們接受到很有可能就是speex協議壓縮后的音頻文件。當然,文件后綴是wav或者ogg都無關緊要

H5audio標簽可以播放

音頻格式及瀏覽器支持

目前, 元素支持三種音頻格式文件: MP3, Wav, 和 Ogg:

瀏覽器 MP3 Wav Ogg

Internet Explorer 9+ YES NO NO

Chrome 6+ YES YES YES

Firefox 3.6+ NO YES YES

Safari 5+ YES YES NO

Opera 10+ NO YES YES

音頻格式的MIME類型

Format MIME-type

MP3 audio/mpeg

Ogg audio/ogg

Wav audio/wav

本開源庫基于speex封裝,抽取了必須要的文件后進一步封裝,修改了在復雜環境下的兼容

本源碼支持環境

原生javaScriptHTML環境

MVVM框架

Electron React dva webpack的跨平臺復雜環境

特別警告:本源碼不支持AMD CMD commonJS ES6以及任何模塊化方案,只能通過script標簽引入后調用函數使用
主要解決了即時通訊中的speex音頻格式文件直接在H5中播放的問題

本項目必須運行在服務器環境下 不能是本地打開index.html文件方式使用(因為用到了websocket通訊)

可以直接讓Speex格式的音頻文件在H5頁面中通過 audio標簽播放

可以在復雜的環境中,如Electron + webpack +dva + React的跨平臺中完美使用

對于頻率小于22khz的數據,我們需要復制一份,模擬成22khz,因為H5只支持大于22khz的數據,但是這種情況我們一般不會遇到

使用

閱讀需要支付1元查看
<