0

我目前正在做一个小项目,我想将 mp3 拆分为帧,通过 websocket 将它们发送到客户端(浏览器),然后使用 WebAudio(webkitAudioContext)播放它们。我的服务器正在运行 nodejs 并将数据作为二进制传输,我使用 binaryJS。我正在测试的浏览器是 Chrome 25.0.1354.0 dev,在 Ubuntu 12.04 上运行。

我已经成功地将 mp3 分割成帧,或者,至少,根据我的测试,它似乎有效。如果我将帧写回文件中,mplayer 播放文件没有问题,并且还可以正确解析标题。每个帧都存储在正确大小的 nodejs 缓冲区中,缓冲区的最后一个字节始终是下一个同步字之前的第一个字节。

作为初始测试,我只发送第一个 MP3 帧。客户端成功接收到帧(存储在 ArrayBuffer 中),并且缓冲区包含正确的数据。但是,当我调用 decode 时,我收到以下消息:

Uncaught Error: SyntaxError: DOM Exception 12 

我调用 decodeAudio 的函数如下所示:

streamDone = ->
    bArray = new Uint8Array(arr[0].byteLength)
    console.log "Stream is done, bytes", bArray.length
    context.decodeAudioData bArray, playAudio, err

我试图解码的初始帧可以在这里找到。

几天来,我一直在努力解决这个问题。有没有人设法解决这个问题并成功解码了 mp3 帧,看看我做错了什么?我在 StackOverflow 上找到了两个相关的问题,但答案并没有帮助我解决问题。但是,根据此处接受的答案,我的帧应该有资格作为有效的 mp3 块,因此可以被解码。

提前感谢您的帮助!

4

1 回答 1

0

事实证明,休息和一些新鲜的眼睛可以创造奇迹,一般的代码清理解决了这个问题。如果有人对代码感兴趣,我在这里发布。

于 2012-12-14T10:17:55.503 回答