簡體   English   中英

使用具有帶寬控制和動態音軌切換的Node.js流音頻

[英]Streaming audio with Node.js with bandwidth control and dynamic track switching

假設我的服務器上同一首歌曲的比特率mp3不同。 是否可以讓我的節點服務器檢測客戶端接收數據塊的速度,從而在文件之間動態切換? 例如,服務器接收到對軌道的請求,然后開始將其192kbps版本的流傳輸到客戶端。 經過幾個塊之后,它檢測到客戶端沒有足夠快地接收到它們,因此將數據源切換到128 kbps版本,依此類推。 目前,我只能通過一個簡單的測試來做到這一點,但是它根本沒有任何控制選項:

const mediaServer = require('mediaserver');
router.get('/play', function(req, res, next){
    mediaServer.pipe(req, res, appRoot + 'private/media/musica/m.mp3')
});

您描述的方法通常用於視頻交付中-通常使用的術語是自適應比特率(ABR)流。

ABR與您所描述的內容之間的主要區別在於,下一個塊使用哪個比特率的決定由客戶端而不是服務器決定。

這在實踐中效果很好,因為無論如何,都是客戶端在請求塊,並且最好通過例如檢查inout緩沖區來了解其是否可以處理更高的速率或需要更低的速率。

您可以檢查幾種開源ABR實施方案,以了解它們的工作原理-如前所述,大多數是針對視頻的,並且與視頻相比,音頻通常很小,您可能會發現它們不使用ABR進行音頻,但是原理會一樣。

video.js和dash.js可能是最容易找到的代碼:

特別是,如果您查看dash.js中的ABR規則(撰寫本文時為dash.js / src / streaming / rules / abr /),則有助於快速了解其實施方式-相當多經驗和邏輯,因此您可能會發現最容易利用這種激動人心的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM