成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

curried / 3044人閱讀

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

這么牛逼的輪子,肯定要美圖鎮(zhèn)樓
Speex是一套主要針對(duì)語音的開源免費(fèi),無專利保護(hù)的音頻壓縮格式。
本輪子,適用超大型項(xiàng)目,因?yàn)閹毂旧砗艽?,?dāng)然本身IM項(xiàng)目就沒有小項(xiàng)目吧

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

編碼流程

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

定義一個(gè)SpeexBits類型變量bits和一個(gè)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ì)量等級(jí);參數(shù)ptr表示要設(shè)定的值。

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

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

解碼流程

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

定義一個(gè)SpeexBits類型變量bits和一個(gè)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)對(duì)參數(shù)bits中的Speex格式音頻數(shù)據(jù)幀進(jìn)行解碼,參數(shù)out中存放解碼后的音頻數(shù)據(jù)幀。

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

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

H5audio標(biāo)簽可以播放

音頻格式及瀏覽器支持

目前, 元素支持三種音頻格式文件: 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封裝,抽取了必須要的文件后進(jìn)一步封裝,修改了在復(fù)雜環(huán)境下的兼容

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

原生javaScriptHTML環(huán)境

MVVM框架

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

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

本項(xiàng)目必須運(yùn)行在服務(wù)器環(huán)境下 不能是本地打開index.html文件方式使用(因?yàn)橛玫搅藈ebsocket通訊)

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

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

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

使用

閱讀需要支付1元查看
<