gpt4 book ai didi

javascript - 使用具有带宽控制和动态轨道切换功能的Node.js流音频

转载 作者:行者123 更新时间:2023-12-03 00:29:50 26 4
gpt4 key购买 nike

假设我的服务器上同一首歌曲的比特率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可能是最容易找到的代码:

  • https://github.com/videojs/video.js
  • https://github.com/Dash-Industry-Forum/dash.js

  • 特别是,如果您查看dash.js中的ABR规则(撰写本文时为dash.js / src / streaming / rules / abr /),则有助于快速了解其实现方式-相当多经验和逻辑,因此您可能会发现,最容易利用这种激动人心的东西。

    关于javascript - 使用具有带宽控制和动态轨道切换功能的Node.js流音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097178/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com