亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從Node到瀏覽器的不同方式的優缺點,提供和播放wav音頻文件

從Node到瀏覽器的不同方式的優缺點,提供和播放wav音頻文件

皈依舞 2022-08-18 10:08:27
正如我所看到的,我們可以將本機HTMLAudioElement與,從Node提供文件或流.js并讓本機播放器使用它并產生聲音。src我們還可以將其拆分為塊(HLS / RTMP),并與JavaScript播放器一起使用它們,該播放器可以像hls.js或mediaelement一樣使用它。這將有助于長音頻文件(可能很重),因此我們可以在擁有所有內容之前開始播放。我還看到了一個使用websockets的有趣項目。還有哪些其他方法?每種方法的優缺點是什么?這些是否屬于能夠加密所提供內容的“優點”?
查看完整描述

2 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

加密音頻/視頻可以由服務器手動完成。理想情況下,使用流。


const crypto = require("crypto")

const fs = require("fs")


const browser = getClientConnectionSomehow()


const encryptor = crypto.createCipheriv("aes256", "32 character long string", Buffer.alloc(16))


fs.createReadStream("path/to/video.mp4").pipe(encryptor).pipe(browser)

然后,您可以在大流中將其發送到客戶端。另一種可能更好的方法是讓客戶端建立一個WebSocket,客戶端請求視頻塊,服務器使用將所選部分向下管道傳輸到客戶端。writeStreams


我用1分鐘的視頻和本地主機在瀏覽器上運行了一個快速測試。它只是將視頻通過管道傳輸到客戶端,沒有限制,并且運行良好。我沒有實現限制,但在偽代碼術語中,我這樣做的方式是:


客戶:


<video src="/path/to/video">


</video>

let video = document.getElement("video")

WebSocket.send((currentVideoBuffer - video.currentTime) >= 10)

// say, we wait until there are 10 seconds left in the video to load the next chunk.

服務器:


http.createServer((req,res) => {

    let stream = fs.createReadStream("path/to/video.mp4")

    WebSocket.on((shouldSend) => {

        if (shouldSend) {

            res.write(stream.read(500000)

            // just a dummy number of bytes. change as needed.

        }

    })

})

這嚴重簡化了它的實際工作方式。你需要對偽代碼進行大量改進,然后才能真正成為一個可行的選擇。但對于直播音頻/視頻,這基本上描述了所有后端需求。如果您需要加密,我建議使用此選項,但我不知道瀏覽器如何解密它,然后將其塞入音頻元素中。


從 nodejs 流式傳輸到客戶端相當簡單(使用 express,只需掛接到來自 FS 的讀取函數即可)。res.writereadStream


Node是為流媒體內容而構建的,我建議研究他們的原生工具。我沒有研究過你鏈接的庫,但它們似乎是可行的選擇。


我認為這一切都取決于你想要多少工具。使用您自己的自定義實現,您可以添加和刪除功能以制作您夢寐以求的視頻/音頻播放器。(我相信有一種方法可以像Opus流一樣,降低某些流的質量,使某些流花費更少的kb / s)。


我認為使用預制庫最適合起步,但是如果您的項目圍繞此流,或者您需要像AES-256之類的東西或任何非正統的東西,我建議您自己實現。正如我上面所演示的,它很復雜,但不太難,這要歸功于nodejs。


編輯


我找到了這個NodeJS項目。它是一個視頻解析器,可讓您將視頻拆分為緩沖區塊(并獲取緩沖區的長度!這應該可以幫助您拆分和流式傳輸緩沖區。


https://github.com/gkozlenko/node-video-lib


查看完整回答
反對 回復 2022-08-18
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

我在一個音樂流媒體平臺上工作。我們必須提供多達1-2 GB的音頻文件作為流。所以我做了這個。使用ffmpeg庫來格式化上傳的音頻。ffmpeg 應該安裝在您的計算機上。

require('child_process').exec(`ffmpeg -y -i ${dir_str} -codec copy -bsf:v h264_mp4toannexb -map 0 -f segment -segment_time 10 -segment_format mpegts -segment_list "${m3u8_path}/${soundId}.m3u8" -segment_list_type m3u8 "${m3u8_path}/ts%d.ts"`)

我認為這有好處。


查看完整回答
反對 回復 2022-08-18
  • 2 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號