JAVA音視頻解決方案----收音基礎

序言

            最近要弄實時語音對講,先從怎麼收音開始吧.參考文章地址如下:

  1. https://segmentfault.com/a/1190000014048967

 

歷史

       長久以來,音頻/視頻捕獲都是網絡開發中的“聖盃”。多年來,我們總是依賴於瀏覽器插件(Flash 或 Silverlight)實現這一點。快來看看吧!

       現在輪到 HTML5 大顯身手了。也許看起來不是很顯眼,但是 HTML5 的崛起引發了對設備硬件訪問的激增。
地理位置 (GPS)、Orientation API(加速計)、WebGL (GPU) 和 Web Audio API(視頻硬件)都是很好的例子。
這些功能非常強大,展示了基於系統底層硬件功能之上的高級 JavaScript API。

       過去幾年中出現過好幾種“Media Capture API”的變體。很多人意識到,需要能夠在網絡上訪問本地設備,但這要所有人合力開發出一種新的規範。局面一片混亂,以至於 W3C 最終決定成立一個工作組。他們只有一個目的:理清混亂的局面!設備 API 政策 (DAP) 工作組負責對過剩的提議進行統一和標準化。

 

第 1 輪:HTML 媒體捕獲

 

        HTML 媒體捕獲是 DAP 在網絡媒體捕獲標準化上邁出的第一步。具體方法是超載 <input type="file"> 併爲 accept 參數添加新值。

       如果您要讓用戶通過網絡攝像頭拍攝自己的快照,就可以使用 capture=camera:

<input type="file" accept="image/*;capture=camera">

      錄製視頻或音頻也是類似的:

<input type="file" accept="video/*;capture=camcorder">
<input type="file" accept="audio/*;capture=microphone">


如上的我在Chrome中測試了就是文件上傳的功能,不能用~~~~~~

 

第 2 輪:設備元素(這個根據文章描述,簡直是個搞笑的出場)

       很多人認爲 HTML 媒體捕獲的侷限性太大,因此一種新的規範應運而生,可以支持任何類型的(未來)設備。不出意料地,該設計需要新的 <device> 元素,也就是 getUserMedia() 的前身。

       Opera 是第一批根據 <device> 元素創建視頻捕獲的初始實施的瀏覽器之一。不久之後(準確地說是同一天),WhatWG 決定廢止 <device> 標記,以支持稱爲 navigator.getUserMedia() 的新興 JavaScript API。一週後,Opera 推出的新版本中加入了對更新的 getUserMedia() 規範的支持。當年年底,Microsoft 也加入這一行列,發佈了 IE9 實驗室以支持新規範。([email protected])很遺憾,已發佈的瀏覽器中沒有任何一款曾經包含 <device>。我猜這是一個不太需要擔心的 API。但是 <device> 確實有兩大優點:一是語義方面,二是可以輕鬆進行擴展,而不僅僅是支持音頻/視頻設備。

<device type="media" οnchange="update(this.data)"></device>
<video autoplay></video>
<script>
  function update(stream) {
    document.querySelector('video').src = stream.url;
  }
</script>

 

 

第 3 輪:WebRTC 這就是今天討論的重點了

        <device> 元素最終還是像渡渡鳥一樣銷聲匿跡了。

        依靠 WebRTC(網絡即時通信)的大力協助,最近幾個月尋找合適捕獲 API 的步伐加快了很多。該規範由 W3C WebRTC 工作組負責監管。Google、Opera、Mozilla 和其他一些公司目前正致力於在自己的瀏覽器中實施該 API。

getUserMedia() 與 WebRTC 相關,因爲它是通向這組 API 的門戶。它提供了訪問用戶本地相機/麥克風媒體流的手段。

 

WebRTC

         WebRTC實現了基於網頁的視頻會議,標準是WHATWG 協議,目的是通過瀏覽器提供簡單的javascript就可以達到實時通訊(Real-Time Communications (RTC))能力。

        WebRTC(Web Real-Time Communication)項目的最終目的主要是讓Web開發者能夠基於瀏覽器(Chrome\FireFox\...)輕易快捷開發出豐富的實時多媒體應用,而無需下載安裝任何插件,Web開發者也無需關注多媒體的數字信號處理過程,只需編寫簡單的Javascript程序即可實現,W3C等組織正在制定Javascript 標準API,目前是WebRTC 1.0版本,Draft狀態;另外WebRTC還希望能夠建立一個多互聯網瀏覽器間健壯的實時通信的平臺,形成開發者與瀏覽器廠商良好的生態環境。同時,Google也希望和致力於讓WebRTC的技術成爲HTML5標準之一,可見Google佈局之深遠。

        WebRTC提供了視頻會議的核心技術,包括音視頻的採集、編解碼、網絡傳輸、顯示等功能,並且還支持跨平臺:windows,linux,mac,android。

 

AudioContext

     AudioContext接口表示由音頻模塊連接而成的音頻處理圖,每個模塊對應一個AudioNode。

     AudioContext可以控制它所包含的節點的創建,以及音頻處理、解碼操作的執行。(這句話很重要:[email protected])

     做任何事情之前都要先創建AudioContext對象,因爲一切都發生在這個環境之中。

 

getUserMedia

       MediaDevices.getUserMedia() 會提示用戶給予使用媒體輸入的許可,媒體輸入會產生一個MediaStream,裏面包含了請求的媒體類型的軌道。此流可以包含一個視頻軌道(來自硬件或者虛擬視頻源,比如相機、視頻採集設備和屏幕共享服務等等)、一個音頻軌道(同樣來自硬件或虛擬音頻源,比如麥克風、A/D轉換器等等),也可能是其它軌道類型。

       它返回一個 Promise 對象,成功後會resolve回調一個 MediaStream 對象。若用戶拒絕了使用權限,或者需要的媒體源不可用,promise會reject回調一個 PermissionDeniedError 或者 NotFoundError 。

 

 

 

 

 

 

 

 

-------------------未完待續

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章