gpt4 book ai didi

c++ - 如何在 C/C++ 中获取用于流式传输的 mp3 音频数据包

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:41:55 25 4
gpt4 key购买 nike

我希望能够将歌曲分成数据包并访问这些单独的数据包。这样做的原因是我想使用名为命名数据网络的实验性网络协议(protocol)通过网络发送每个单独的数据包。

当数据包到达目的地时,我想播放它们。所以我想实现一个流媒体功能。唯一的区别是我将使用的网络层。该网络层不基于 IP。

有谁知道将歌曲文件分成几部分然后单独播放这些数据包的任何 C/C++ 实现?我查看了 Gstreamer,但从其管道结构中获取单个数据包似乎很复杂。我发现这个引用最接近我想要的,但是对我来说不是很清楚:how can I parse audio raw data recorder with gstreamer?

总结一下我需要的几点:

  1. 将歌曲分成数据包
  2. 播放单个数据包(或一小组数据包)的音频内容。

非常感谢您的帮助!

最佳答案

一个 MP3 文件就是一个 succession of MP3 frames .每个帧由一个头和一个数据 block 组成。

将 MP3 文件拆分为 MP3 帧将涉及解析 MP3 文件。可以引用to this documentation for a good description of the format .

请注意,在 mpeg 第 3 层编解码器的情况下,帧不是独立的。 In the worst case, 9 input frames may be needed before beeing able to decode one single frame.

我会做什么而不是这个

我想您可能会忽略其中的大部分细节,而专注于流媒体问题本身。这是我首先尝试构建的内容:

  • 在发送方,将文件拆分成数据包,然后使用您的系统将它们一个一个地发送。命令示例:send_stream test.mp3

  • 在接收方,接收数据包并重建原始文件。命令示例:receive_stream test.mp3

一旦你的这个工作正常,修改接收程序,以便它在标准输出上按顺序写入数据包。这将允许您将标准输出重定向到一个文件

# sender side did not change
send_stream test.mp3

# receiver side
receive_stream > test.mp3

然后,只需将 receive_stream 输出重定向到 madplay,您就可以使用 madplay 播放 mp3 :

# madplay - tells madplay to read its input from standard input.
receive_stream | madplay -

对于一个好的 mp3 解码器,take a look at MAD .

关于c++ - 如何在 C/C++ 中获取用于流式传输的 mp3 音频数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27112357/

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