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

資訊專欄INFORMATION COLUMN

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

curried / 3032人閱讀

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

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

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

編碼流程

使用SpeexAPI函數(shù)對音頻數(shù)據(jù)進行壓縮編碼要經(jīng)過如下步驟:

定義一個SpeexBits類型變量bits和一個Speex編碼器的內(nèi)存指針變量enc

調(diào)用speex_bits_init(&bits)函數(shù)初始化bits

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

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

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

編碼結(jié)束后,調(diào)用函數(shù)speex_bits_destroy(&bits),speex_encoder_destroy(enc_state)來銷毀SpeexBits和編碼器。

解碼流程

對已經(jīng)編碼過的Speex格式音頻數(shù)據(jù)幀進行解碼要經(jīng)過以下步驟:

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

調(diào)用speex_bits_init(&bits) 函數(shù)初始化bits

調(diào)用dec = speex_decoder_init(&speex_nb_mode) 函數(shù)初始化dec

調(diào)用函數(shù)speex_decoder_ctl(void * state, int request, void * ptr)來設(shè)定解碼器的參數(shù)。

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

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

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

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封裝,抽取了必須要的文件后進一步封裝,修改了在復(fù)雜環(huán)境下的兼容

本源碼支持環(huán)境

原生javaScriptHTML環(huán)境

MVVM框架

Electron React dva webpack的跨平臺復(fù)雜環(huán)境

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

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

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

可以在復(fù)雜的環(huán)境中,如Electron + webpack +dva + React的跨平臺中完美使用

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

使用

閱讀需要支付1元查看
<