尝试通过websocket流式传输MP3时出现DOM异常12

时间:2012-12-13 13:21:13

标签: javascript node.js streaming websocket web-audio

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

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

作为初步测试,我只发送第一个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

我想要发起的初始框架here

我一直在墙上撞了几天,试图解决这个问题。有没有人设法解决这个问题并成功解码了mp3帧,看看我做错了什么?我在StackOverflow上找到了两个相关的问题,但答案并没有帮助我解决我的问题。但是,根据接受的答案here,我的帧应符合有效的mp3块,因此可以解码。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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