将音频/视频加密可以由您的服务器手动完成。理想情况下,使用流进行加密。
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)
服务器:
http.createServer((req,res) => {
let stream = fs.createReadStream("path/to/video.mp4")
WebSocket.on((shouldSend) => {
if (shouldSend) {
res.write(stream.read(500000)
}
})
})
这是极度简化了实际操作方式。在实际应用中,您需要大量改进伪代码才能使其成为可行的选择。但对于音频/视频的直播,这基本上描述了所有后端需求。如果您需要加密,我建议使用此选项,但我不知道浏览器如何解密它,然后将其放入音频元素中。
从nodejs流式传输到客户端相当简单(使用express,只需将res.write连接到FS的readStream的读取函数即可)。
Node是为流内容构建的,并建议查看其原生工具。我还没有研究过您链接的库,但它们似乎是可行的选项。
我认为关键在于您想要多少工具。通过自己的定制实现,您可以添加和删除功能,以创建您梦寐以求的视频/音频播放器。(我确信有一种方法,就像Opus流那样,可以降低某些流的质量,使一些流占用更少的kb/s)。
我认为使用现成的库是最好的起步方式,但如果你的项目围绕流媒体展开,或者你需要类似AES-256或其他非传统算法,那么建议自己实现。正如我上面所演示的,这很复杂,但由于nodejs的存在,也不是太难。
编辑:
我找到了这个NodeJS项目。它是一个视频解析器,可以让你将视频拆分成缓冲区块(并获取缓冲区块的长度!)。这应该有助于您拆分和流式传输缓冲区块。
https://github.com/gkozlenko/node-video-lib