Html5 audio 提供、传输和使用大型音频文件的基本架构,以最大限度地减少客户端资源消耗和延迟

Html5 audio 提供、传输和使用大型音频文件的基本架构,以最大限度地减少客户端资源消耗和延迟,html5-audio,http-live-streaming,audio-streaming,web-audio-api,audio-player,Html5 Audio,Http Live Streaming,Audio Streaming,Web Audio Api,Audio Player,我正在尝试构建一个web应用程序,它需要以某种方式实现音频流功能。只是想给你们一些背景:它被设计成一个纯粹的试听体验/游戏/idkhowtocallit,有很多不同的声音资源,长度和文件大小各不相同。提供的声音资产将包括环境声音、对话的语音片段,以及长音乐集(最多几个小时)。为什么我认为我不能在某个服务器或CDN上托管这些音频文件并从那里提供服务,这是因为声音资产需要动态(取决于用户交互)并尽可能即时地获取和播放 最重要的是,整体上使用较大的文件(如音乐集和较长的环境循环)对我来说根本不利于客户

我正在尝试构建一个web应用程序,它需要以某种方式实现音频流功能。只是想给你们一些背景:它被设计成一个纯粹的试听体验/游戏/idkhowtocallit,有很多不同的声音资源,长度和文件大小各不相同。提供的声音资产将包括环境声音、对话的语音片段,以及长音乐集(最多几个小时)。为什么我认为我不能在某个服务器或CDN上托管这些音频文件并从那里提供服务,这是因为声音资产需要动态(取决于用户交互)并尽可能即时地获取和播放

  • 最重要的是,整体上使用较大的文件(如音乐集和较长的环境循环)对我来说根本不利于客户端(移动网络上使用的数据消耗和客户端内存使用)
  • 此外,如果没有任何缓冲或流机制,客户端将无法在完全下载这些文件之前开始播放它们,对吗?这将增加高延迟的问题
  • 我试着在网上研究如何正确地实现一个好的基础设施,将更大的音频文件流到服务器端的客户端,并找到了HLS和MPEG-DASH。我有一些使用网络播放器的HLS播放器的经验,如果我理解正确,我会使用某种一次性转换过程(在文件上传时或之后)将文件分割成块,创建播放列表,然后通过HTTP提供这些文件。据我所知,MPEG-DASH的处理过程应该大致相同。我对这两种技术的问题是,如果不重新发明轮子,我真的找不到任何关于如何实现JavaScript/TypeScript客户端(特别是使用Web音频API)的文档。我最好的猜测是使用类似的东西,将HLS流绑定到新创建的音频元素,并使用这些元素在我的Web音频图中创建音频源。我离这里有多远?我想至少了解一个最佳实践

    总结一下,我非常希望能够澄清一下:

  • HLS或MPEG-DASH真的会是一条出路吗?还是我缺少了一种更基本的、具有良好库的分块文件流机制
  • 从理论上讲,我应该如何限制客户端提前下载的块的数量以节省客户端资源,这是我最关心的问题之一
  • 我也在研究托管服务,但我发现大多数托管服务都专门用于托管播客(数量较少但非常大的文件)。有没有人对我是否可以使用这些服务来承载和流式传输可能1000个大小从非常小到相当大的文件有什么看法
  • 提前非常感谢所有愿意帮助我的人。非常感谢

    为什么我认为我不能在某个服务器或CDN上托管这些音频文件并从那里提供服务,这是因为声音资产需要动态(取决于用户交互)并尽可能即时地获取和播放

    您的长时间运行的环境声音可以流,使用一个正常的。播放它们时,在开始播放之前可能会有一点延迟,因为它们必须开始流式播放,但请注意,浏览器通常会预取元数据,甚至可能预取媒体数据的开头

    对于延迟非常关键的短声音(如一次性用户交互声音效果),请使用Web Audio API将其加载到缓冲区中进行播放。您将无法流式播放它们,但它们会立即播放

    最重要的是,整体上使用较大的文件(如音乐集和较长的环境循环)对我来说根本不利于客户端(移动网络上使用的数据消耗和客户端内存使用)

    如果你想播放音频,你自然要下载音频。你不能以某种方式播放未加载的内容。如果您使用音频元素,您下载的内容不会比正在播放的内容多得多。而且,下载主要是按需进行的

    此外,如果没有任何缓冲或流机制,客户端将无法在完全下载这些文件之前开始播放它们,对吗?这将增加高延迟的问题

    如果您使用音频元素,浏览器将负责所有缓冲以及其他不适合您的内容。你不必担心

    我试着在网上研究如何正确地实现一个好的基础设施,将更大的音频文件流到服务器端的客户端,并找到了HLS和MPEG-DASH

    如果你只传输一个比特率(这对于音频来说通常是好的),而不传输直播内容,那么HLS或DASH在这里就没有意义了

    HLS或MPEG-DASH真的会是一条出路吗?还是我缺少了一种更基本的、具有良好库的分块文件流机制

    浏览器将发出范围广泛的HTTP请求,以从常规静态媒体文件中获取所需的数据。您不需要做任何特殊的事情来流式传输它。只需确保您的服务器已配置为处理范围内的请求。。。大多数人都应该能够在开箱即用的情况下做到这一点

    从理论上讲,我应该如何限制客户端提前下载的块的数量以节省客户端资源,这是我最关心的问题之一

    如果使用音频元素,浏览器会为您执行此操作。此外,数据保存设置和检测到的连接速度可能会影响浏览器是否预取。关键是,你不必为此担心。你只能使用你需要的东西

    只要确保你是压缩的