優(yōu)化Recorder H5錄音:可邊錄邊轉(zhuǎn)碼上傳服務(wù)器咙冗,支持微信提供Android IOS Hybrid App源碼

Recorder H5 GitHub開源庫隨著支持功能的增多孵滞,音頻轉(zhuǎn)碼處理效率漸漸的跟不上需求了中捆,近期抽時間對音頻轉(zhuǎn)碼部分進行了升級優(yōu)化,以支持更多實用的功能坊饶。
另外IOS的Hybrid App也完成了移植泄伪,Android和IOS都有了Demo App。

在線測試匿级,GitHub地址:https://github.com/xiangyuecn/Recorder

一蟋滴、Recorder H5錄音庫的特性

(1)瀏覽器支持

  1. PC:包括但不限于Chrome染厅、Firefox
  2. Android:ChromeFirefox津函、Android WebView肖粮、騰訊Android X5內(nèi)核(QQ、微信) (不支持UC系列瀏覽器尔苦,如:UC涩馆、支付寶罐栈、大部分國產(chǎn)手機廠商的瀏覽器)
  3. IOS:Safari嗜愈,微信(JsSDK)
  4. Hybrid App:提供Android、IOS端App的JsBridge接口進行對接即可

(2)功能支持

  1. 已提供mp3 wav ogg(beta) webm(beta) amr(beta)格式支持斧吐,支持任意格式擴展
  2. 提供實時音量反饋
  3. 提供一個美觀的實時波形繪制擴展插件
  4. 錄音權(quán)限請求和錄音功能分開設(shè)計屋讶,可先請求權(quán)限冰寻,在需要的時候開始錄音
  5. mp3格式錄音文件默認2kb大小/秒,語音音質(zhì)尚可皿渗,再降低音質(zhì)可小到1kb/秒
  6. 【新】 mp3 wav格式轉(zhuǎn)碼“迅速”斩芭,結(jié)束錄音時幾乎可立即得到音頻文件,另外可實現(xiàn)邊錄邊轉(zhuǎn)碼成小語音片段文件實時上傳服務(wù)器
  7. 提供功能豐富的Demo乐疆,支持瀏覽器在線測試划乖,【新】 提供Android(15+) Hybrid App安裝包和源碼,【新】 提供IOS(9.0+) Hybrid App源碼供自行編譯

二挤土、使用預(yù)覽截圖

(1)移動端H5

移動端H5

(2)IOS Hybrid App

IOS Hybrid App

(3)Android Hybrid App

Android Hybrid App

三琴庵、應(yīng)用場景

  • 移動端、PC端H5錄音
  • 移動端仰美、PC端H5發(fā)送語音
  • 移動端迷殿、PC端H5語音識別
  • 移動端、PC端H5語音聊天

四庆寺、優(yōu)化過程記錄

(1)為什么要升級優(yōu)化

最開始寫Recorder的時候,只追求簡短的語音錄制诉字,因此采用的是錄音結(jié)束后一次性進行異步(setTimeout分片)轉(zhuǎn)碼懦尝,1分鐘語音在pc端轉(zhuǎn)碼MP3花費100-300ms,移動端花費600-1500ms壤圃,體驗上延遲不算大陵霉,并且代碼邏輯很簡單;如果使用Web Worker(多線程)伍绳,幾乎可以做到?jīng)]有延遲撩匕,但代碼似乎會復(fù)雜很多,就沒有采用墨叛。

后面實際使用過程中發(fā)現(xiàn):

  1. 稍微長點的語音轉(zhuǎn)碼移動端非常吃力止毕,2、3分鐘的語音要花費5漠趁、10秒進行MP3轉(zhuǎn)碼扁凛;
  2. 進行實時轉(zhuǎn)碼發(fā)送給服務(wù)器時,除了wav格式本身編碼非常迅速外闯传,其他格式一律會導(dǎo)致錄音卡頓谨朝,原因是編碼占用了太多的時間,編碼期間的錄音數(shù)據(jù)無法正常接收甥绿。

基于以上兩點問題字币,似乎只有Web Worker(多線程)能夠解決。

(2)開始使用Web Worker加速轉(zhuǎn)碼

“加速”是要加引號的共缕,其實開啟了Web Worker支持洗出,轉(zhuǎn)碼速度還是一樣的速度,只是轉(zhuǎn)碼工作放到了后臺線程图谷,不占用頁面的時間而已翩活。

但可以做到邊錄音邊轉(zhuǎn)碼,不需要等到錄音結(jié)束時扎堆轉(zhuǎn)碼便贵,結(jié)果就是不管錄制的語音有多長菠镇,結(jié)束錄音時轉(zhuǎn)碼都是瞬間完成的。

也可以完美的做到實時進行轉(zhuǎn)碼成小語音片段文件上傳到服務(wù)器承璃,因為轉(zhuǎn)碼不占用網(wǎng)頁的時間了利耍,錄音可以正常的接收數(shù)據(jù),不會產(chǎn)生卡頓盔粹。

(3)剩下的問題

要支持邊錄邊轉(zhuǎn)碼隘梨,并非僅僅開啟Web Worker支持就可以了,還必須要有音頻編碼器的支持玻佩。如果編碼器只能將完整的PCM數(shù)據(jù)一次性的轉(zhuǎn)碼成音頻文件出嘹,那么就需要修改編碼器源碼,用來支持流式的轉(zhuǎn)碼咬崔,來一段PCM轉(zhuǎn)一段税稼。

還好庫里的MP3編碼器是支持流式的,不需要改動就能用垮斯;不過其他的格式不改編碼器源碼似乎無法去支持郎仆;wav格式除外,wav編碼速度出奇的快兜蠕,不用優(yōu)化也是沒有問題的扰肌。

因此目前MP3格式使用了Web Worker,MP3和wav格式都支持邊錄邊轉(zhuǎn)碼熊杨,其他格式依舊是結(jié)束錄音時異步(setTimeout分片)轉(zhuǎn)碼曙旭。

五盗舰、Hybrid App存在的意義

本身是無意義的(或者說純粹是多余的),但無奈IOS各種不支持:非官方瀏覽器不支持桂躏、App內(nèi)WebView不支持钻趋,但Android又各種都支持,本來純粹的H5一把梭(包括在Hybrid App中)是最方便的剂习,蘋果要拖后腿也沒辦法蛮位。

因此僅需在IOS的Hybrid App上做兼容即可,但考慮到簡化js端的復(fù)雜性(出問題了好甩鍋)鳞绕,不管是Android還是IOS都實現(xiàn)一下可能會簡單很多失仁;另外Android和IOS的音頻編碼并非易事,且不易更新们何,使用js版的音頻轉(zhuǎn)碼可大大簡化App的邏輯萄焦;所以Android端也提供Hybrid App支持。

六垂蜗、更多支持

GitHub倉庫內(nèi)有所有的源代碼楷扬,有詳細的使用介紹和Demo,有使用交流群贴见,如果使用過程中有什么問題可以提issue或發(fā)消息烘苹。要是能打賞支持就更好了,倉庫內(nèi)有二維碼片部。哈哈嘿~ GitHub地址:https://github.com/xiangyuecn/Recorder

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镣衡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子档悠,更是在濱河造成了極大的恐慌廊鸥,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辖所,死亡現(xiàn)場離奇詭異惰说,居然都是意外死亡,警方通過查閱死者的電腦和手機缘回,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門吆视,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酥宴,你說我怎么就攤上這事啦吧。” “怎么了拙寡?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵授滓,是天一觀的道長。 經(jīng)常有香客問我,道長般堆,這世上最難降的妖魔是什么在孝? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮淮摔,結(jié)果婚禮上浑玛,老公的妹妹穿的比我還像新娘。我一直安慰自己噩咪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布极阅。 她就那樣靜靜地躺著胃碾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筋搏。 梳的紋絲不亂的頭發(fā)上仆百,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音奔脐,去河邊找鬼俄周。 笑死,一個胖子當(dāng)著我的面吹牛髓迎,可吹牛的內(nèi)容都是我干的峦朗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼排龄,長吁一口氣:“原來是場噩夢啊……” “哼波势!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橄维,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尺铣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后争舞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凛忿,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年竞川,在試婚紗的時候發(fā)現(xiàn)自己被綠了店溢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡流译,死狀恐怖逞怨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情福澡,我是刑警寧澤叠赦,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響除秀,放射性物質(zhì)發(fā)生泄漏糯累。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一册踩、第九天 我趴在偏房一處隱蔽的房頂上張望泳姐。 院中可真熱鬧,春花似錦暂吉、人聲如沸胖秒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阎肝。三九已至,卻和暖如春肮街,著一層夾襖步出監(jiān)牢的瞬間风题,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工嫉父, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沛硅,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓绕辖,卻偏偏與公主長得像摇肌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子引镊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容