1. 程式人生 > >html5錄音支援pc和Android、ios部分瀏覽器,微信也是支援的,JavaScript getUserMedia

html5錄音支援pc和Android、ios部分瀏覽器,微信也是支援的,JavaScript getUserMedia

花了兩天時間在前人基礎上重複造了一個網頁錄音的輪子,順帶把github倉庫使用研究了一下,扔到了github上,地址:https://github.com/xiangyuecn/Recorder

copy之前說點什麼

準備做一個網頁版聊天介面,表情啊、圖片啊、上傳檔案啊都應該要有,視訊就算了,語音還是要的。

當下環境html5的錄音功能支援情況大為良好,微信完美支援(請忽略他家的jssdk)
2018-05瀏覽器支援情況,棒棒噠
如是,就造起了輪子。

以下內容copy自README

Recorder用於html5錄音

錄音預設輸出mp3格式,另外可選wav格式(此格式錄音檔案超大)

mp3預設16kbps的位元率,大概2kb每秒,如果使用8kbps可達到1kb每秒,不過音質很渣,沒有amr格式的可比性。

已內建lamejs依賴用於mp3編碼,剝離後核心程式碼不足300行

快速使用

在需要錄音功能的頁面引入js檔案程式碼即可,對於https的要求不做解釋

<script src="recorder.js"></script>

然後使用,假設立即執行,只錄3秒

var rec=Recorder();
rec.open(function(){//開啟麥克風授權獲得相關資源
    rec.start();//開始錄音
},function(msg){
    console.log("無法錄音:"+msg);
});
setTimeout(function(){
    rec.stop(function
(blob){
//到達指定條件停止錄音,拿到blob物件想幹嘛就幹嘛:立即播放、上傳 console.log(URL.createObjectURL(blob)); rec.close();//釋放錄音資源 },function(msg){ console.log("錄音失敗:"+msg); }); },3000);

方法文件

rec=Recorder(set)

拿到Recorder的例項,然後可以進行請求獲取麥克風許可權和錄音。
set引數為配置物件,預設配置值如下:

set={
    type:"mp3" //輸出型別:mp3,wav
    ,bitRate:16
//位元率 wav:168位,MP3:8位元1k/s,16位元2k/s 比較划得來 ,sampleRate:16000 //取樣率,wav專用 ,bufferSize:8192 //AudioContext緩衝大小 //取值256, 512, 1024, 2048, 4096, 8192, or 16384,會影響onProcess呼叫速度 ,onProcess:NOOP //接收到錄音資料時的回撥函式:fn(buffer,powerLevel,bufferDuration) //buffer=[緩衝資料,...],powerLevel:當前緩衝的音量級別0-100,bufferDuration:已緩衝時長 //如果需要繪製波形之類功能,需要實現此方法即可,使用以計算好的powerLevel可以實現音量大小的直觀展示,使用buffer可以達到更高階效果 }
rec.open(success,fail)

請求開啟錄音資源,如果使用者拒絕麥克風許可權將會呼叫fail,開啟後需要呼叫close
注意:此方法是非同步的;一般使用時開啟,用完立即關閉;可重複呼叫,可用來測試是否能錄音。
success=fn();
fail=fn(errMsg);

rec.close(success)

關閉釋放錄音資源,釋放完成後會呼叫success()回撥

rec.start()

開始錄音,需先呼叫open;如果不支援、錯誤,不會有任何提示,因為stop時自然能得到錯誤。

rec.stop(success,fail)

結束錄音並返回錄音資料blob物件,拿到blob物件就可以為所欲為了,不限於立即播放、上傳
success(blob,duration)blob:錄音資料audio/mp3|wav格式,duration:錄音時長,單位毫秒
fail(errMsg):錄音出錯回撥

提示:stop時會進行音訊編碼,音訊編碼可能會很慢,10幾秒錄音花費2秒左右算是正常,編碼並未使用Worker方案(檔案多),內部採取的是分段編碼+setTimeout來處理,介面卡頓不明顯。

Recorder.IsOpen()

由於Recorder持有的錄音資源是全域性唯一的,可通過此方法檢測是否有Recorder已呼叫過open打開了錄音功能。

Recorder.lamejs

lamejs的引用

縮小js檔案

recorder.js用Uglify壓縮一下剩餘156kb,不算大

如果不需要mp3格式,可以把lamejs程式碼全部移除,recorder.js精簡到300來行程式碼,僅僅支援wav格式;mp3編碼採用的是https://github.com/zhuker/lamejs/blob/bfb7f6c6d7877e0fe1ad9e72697a871676119a0e/lame.all.js這個版本的程式碼。

相容性

對於支援錄音的瀏覽器能夠正常錄音並返回錄音資料;對於不支援的瀏覽器,引入此js和執行相關方法都不會產生異常,並且進入相關的fail回撥。一般在open的時候就能檢測到是否支援或者被使用者拒絕,可在使用者開始錄音之前提示瀏覽器不支援錄音或授權。

相關推薦

html5錄音支援pcAndroidios部分瀏覽器支援JavaScript getUserMedia

花了兩天時間在前人基礎上重複造了一個網頁錄音的輪子,順帶把github倉庫使用研究了一下,扔到了github上,地址:https://github.com/xiangyuecn/Recorder copy之前說點什麼 準備做一個網頁版聊天介面

JS判斷手機系統版本為AndroidiOS(可識別或QQ瀏覽器

<%@ page pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/ht

關於ios 11.X後wifi認證無法打開無法重定向到weixin:開頭網址等問題的處理

width 問題 aos 開頭 優化 重定向 bubuko gin indexof 環境:   認證路由ROS ,認證後臺python django ios11系統 更新以來先後出現微信wifi認證,無法打開微信,無法重定向到weixin:開頭網址等相關問題。 經

關於ios 11.X後wifi認證無法開啟無法重定向到weixin:開頭網址等問題的處理

環境:   認證路由ROS ,認證後臺python django ios11系統 更新以來先後出現微信wifi認證,無法開啟微信,無法重定向到weixin:開頭網址等相關問題。     經過問題的收集,查詢到網路上此類問題普遍存在 收集到的有如下網址,市面上大多數廠商在使用

Android通過外部瀏覽器呼叫H5支付Android+PHP詳解

看了好多關於講解微信H5支付開發的文章,大多數都是通過微信內部瀏覽器來呼叫支付介面(其實就是公眾號支付),可能是因為H5支付介面剛開放不久吧。 微信官方體驗連結:http://wxpay.wxutil.com/mch/pay/h5.v2.php,請在

JAVA版開源管家—JeeWx捷3.1小程式版本釋出支援公眾號企業號支付窗

支援小程式,JeeWx捷微3.1小程式版本釋出^_^JeeWx捷微V3.1——多觸點小程式版本管理平臺(支援微信公眾號,微信企業號,支付窗)JeeWx捷微V3.1.0版本緊跟微信小程式更新,在原有多觸點

如何讓C/S應用支援多端(PCAndroidiOS)同時登入?

        在C/S架構中,通常是使用 UserID 作為唯一標誌來標記每一個使用者的,也就是說,對於一個指定的UserID,只能有一個客戶端線上。         如果我們開發的系統要支援同帳號多裝置同時登入的場

一個API解決 區分當前使用應用的一切裝置平臺(AndroidIOSQQ等等一切有提供支援的)

Window Navigator 示例: <div id="example"></div> <script> var txt = ''; txt = "<p>Browser CodeName: " + navigator.appCodeName

unity3DPCAndroidIOS將內容複製到剪下板

原博:https://blog.csdn.net/YE_wolf/article/details/768314461.PC平臺下12//Window剪下板處理GUIUtility.systemCopyBuffer = copyText;2.Android平臺下先新增jar包,

JS 判斷PCandroidios瀏覽器

通過js userAgent來判斷判斷訪問此連結的作業系統<script> var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod")

全沾工程師----如何一個人寫完webAndroidiOS介面CMS

前言 看了文章標題,你也許嚇一跳,心想一個人有那麼牛逼嘛。就當筆者浮誇吧,不想爭辯了。這是一個神奇的時代,我這一代IT人有太多的工具。雖然我懶(其實程式設計師都懶),但是,我選擇的技術和工具仍然具有相當大的自定義空間。 這不是一篇啥好文章,但是,這篇文章可以給那些有需求全沾

loadrunner---AndroidiOS壓力測試

連結來源:http://www.cnblogs.com/ydnice/p/5790848.html 一、LoadRunner簡介 LoadRunner,是惠普公司研發的一款預測系統行為和效能的負載測試工具。通過以模擬上千萬使用者實施併發負載及實時效能監測的方式來確認和查詢問題,LoadRunner能夠對整

phpjavaandroidios通用的3des加密方法

 php、java、android、ios通用的3des方法 php <?php class DES3 { var $key = "my.oschina.net/penngo?#@"; var $iv = "01234567"; fu

移動端車牌識別技術基於AndroidiOS平臺可進行二次開發

目前,我國警務通、停車場手持收費機等移動終端的使用比較普及,如果在這些終端上能夠整合車牌識別功能,對於維護交通安全和城市治安,實現交通自動化管理有著現實的意義。現在出現一款基於移動終端平臺的移動端車牌識別SDK,可方便的植入到警務通、手持收費機、掌上電腦、手機等

2018年10月親測-最牛上網經驗分享-適用WindowsAndroidIOS系統

大家好,今天分享一個自己常用的科學上網方法,在讀書時候老師叫我們去找一些比較好的資料來輔助自己的,我當時英語特別差就專找一些英語的資料,第一次是用的google吧,以前在guo內還能正常使用的,由於後面退出了guonei的舞臺,後面只能科學上網後才能打開了。 後面到了大

cordova打包vue2(webpack)androidios app

使用cordova打包vue2(webpack)app for android ios1、vue專案通過vue-cli腳手架建立專案,使用webpack進行打包,下邊是一整套命令。 #npm 版本最好是最新的,升級npm,node版本也有要求 npm i -g npm # 安裝腳手架 npm

androidIOS 基於webview 與 HTML 的整合

知識點: 1)android 和 html 的整合 2)html 如何通過javascript 判斷 客戶端是 android 還是 IOS 3)IOS 和android 的整合 (我不懂IOS 的oc 開發,所以這部分我省略。。。。我是和我的一個IOS同事一同測試過的,html 是我寫的)

qt 打包到androidios

ios打包 1,qt打包ios 必須先從appstore 下載Xcode最新版。必須是appstore,不能是在官網下載到dmg包。 2,xcode設定測試模擬器 android打包 安卓打包需要配置s

Wi-Fi 爆重大安全漏洞AndroidiOSWindows 等所有無線裝置都不安全了

作者 | 蘇宓 移動裝置橫行的時代,Wi-Fi 已成為現代人生活的必備要素之一。但近日有電腦保安專家發現,Wi-Fi 裝置的安全協議存在漏洞,如今用於保護 Wi-Fi 網路安全的保護機制已經被黑客攻破,蘋果、微軟、谷歌、Nest 等無線裝置紛紛不再安全

某小型公司持續整合工具jenkins實踐(JAVA WEBAndroidIOSHtml)

前言 本文可能是網上最全的一篇全端jenkins部署解決方案介紹的文章,一直以來,領導都想解決程式碼提交和打包問題,尤其是小公司,打包流程混亂,造成線上版本和程式碼庫git或svn中程式碼不一致問題。加入jenkins陣營,解決眾多發包難題,顯得刻不容緩。