3

我们正在使用Cumulus构建一个实时 RTMFP 语音聊天应用程序。虽然使用 NetStreams 进行基本的语音传输非常容易,但我们有一个大问题:

似乎没有办法操纵 NetStream 发送的麦克风数据,也没有办法操纵 NetStream 在播放之前接收到的数据。

然而,这正是我们所需要的。我们不想传输普通麦克风录制的音频,而是先音高,然后发送,然后播放。或者先发送它,然后投它,然后播放它。但似乎整个录音、speex 编码、speex 解码和音频播放都完全封装在 NetStream 类中。

实现我们想要的(并且所有这些都完全删除 NetStream)的唯一方法似乎是:

  1. 发送原始音调音频数据。这确实有效,但当然要发送大量数据,并且在我们的本地 LAN 测试之外可能工作得不够快。

  2. 音调音频数据,使用现有编码器转换为 ogg/mp3 用于闪存、发送、解码 ogg/mp3 和播放。但这意味着对从麦克风接收到的每个样本数据包进行编码,添加标头内容等。因此,与原始音频数据相比,这甚至可能不会产生太大的好处。

    2.1。如果有一个用于闪存的Speex编码器/解码器,这实际上是一个好方法。但具有讽刺意味的是,除了内置的(用于在 NetStreams 中编码/解码音频)之外,没有其他不能明确使用的。是的,非常感谢您不提供它,Adobe ...

  3. 将数据发送到 Cumulus 服务器,在那里推销(并可能转换)并发送给接收者。这可能甚至不会比 1 快得多。并且还抛弃了 RTMFP、P2P 通信的确切好处。

这个问题有没有比我在这里列出的更好的解决方案,可能是一种在麦克风数据传递到 NetStream 之前实际操作麦克风数据的方法?

4

1 回答 1

3

为了获得可行的东西,音频数据必须以压缩格式转换,原始数据代表大量数据。我认为第二个选择更好;-)

我已经在 Flash 中开发了一个 ogg vorbis 解码器/编码器,在使用 Alchemy 时,它消耗的 CPU 总是少于 10%!这是完全可能的。

如果您更喜欢 speex 格式,我认为通过一致的努力,在使用炼金术构建 speex 代码时可以获得相同的东西。

如果我可以给您更多信息,请与我联系 cumulus.dev@gmail.com ;-)

于 2012-04-05T12:37:05.533 回答