【问题标题】:Split mp3 into independently playable pieces that can be stitched back if required将 mp3 拆分为可独立播放的片段,如果需要,可以将其缝合回去
【发布时间】:2019-10-18 15:33:29
【问题描述】:

我想流式传输 mp3。但是,在发送方对其进行解码会占用带宽。是否可以保留压缩格式并仍然能够将其分割成可独立播放的块?然后我可以将它们一一发送并排队和/或将其缝合回接收方。根据我听说的 mp3(不确定其他格式)应该允许这样的规范。

我也很可能从根本上误解了有关音频播放的一般信息。请指教。

【问题讨论】:

  • 听起来你只是需要寻找一个很大的连续流,对吧?
  • 潜在的接收者应该能够寻找——是的,所以基本上从发送者那里请求一个与请求时间相对应的任意块。
  • 您是否有理由不能简单地使用 HTTP 范围请求?这正是大多数浏览器已经在做的事情......它们会根据用户的需要请求播放文件的某些部分。
  • 我将通过原始 TCP 套接字流式传输它,但是 - 是的,它可能归结为像范围请求这样简单的东西。但是从我现在读到的内容 - mp3 帧不一定是独立的,其中一些可能需要组合。
  • 没错。位储存器可以将一帧的数据作为 CBR 流中的一种 VBR 发送给其他帧。但是,玩家会为您解决这个问题,并会弄清楚他们需要播放什么。一件棘手的事情是 MP3 文件本质上不是可搜索的。 (另见:stackoverflow.com/a/53747530/362536)玩家可以通过一些技巧来解决这个问题。如果您正在制作自己的低级别播放器,则可能需要实施这些相同的技巧。如果可能的话,我还鼓励您超越 MP3。它肯定不是我们目前拥有的最好的编解码器。

标签: javascript node.js stream mp3


【解决方案1】:

请查看 mp3 流媒体的 RTP 规范

https://www.rfc-editor.org/rfc/rfc5219

在规范中已经注意了块和框架的相同概念。

您可以使用 mp3 文件中的 mp3 编码数据,使用 rtp 规范打包它们,然后解压缩 rtp,然后将它们组合/写入 mp3 文件。

【讨论】:

  • 你知道这个协议的任何实现吗,最好是在 JavaScript 中,但可能是 C/C++ 或 Rust?
  • 我不知道任何 RTP/RTSP javascript 解决方案,你可以看看 C/C++ 解决方案:live555.com
  • 检查 ffmpeg javascript 包装器:github.com/muaz-khan/Ffmpeg.js
  • 我会将您的答案标记为正确,因为它最终将我带到了我自己的实现中。谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多