0

現在、mp3 をフレームに分割し、websocket を介してクライアント (ブラウザー) に送信し、WebAudio (webkitAudioContext) を使用して再生する小さなプロジェクトに取り組んでいます。私のサーバーは nodejs を実行しており、データをバイナリとして転送するには、binaryJS を使用します。私がテストしているブラウザは、Ubuntu 12.04 で実行されている Chrome 25.0.1354.0 dev です。

私は mp3 をフレームに分割することに成功したか、少なくとも私のテストに基づいて、うまくいくようです。フレームをファイルに書き戻すと、mplayer は問題なくファイルを再生し、ヘッダーも正しく解析します。各フレームは正しいサイズの nodejs バッファーに格納され、バッファーの最後のバイトは常に次の同期ワードの前の最初のバイトになります。

最初のテストとして、最初の MP3 フレームのみを送信しています。クライアントはフレームを正常に受信し (ArrayBuffer に格納されます)、バッファには正しいデータが含まれています。ただし、デコードを呼び出すと、次のメッセージが表示されます。

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

Deocde しようとしている最初のフレームは、ここにあります

私はこれを解決しようとして、数日間壁に頭をぶつけてきました。誰かがこれを解決し、mp3 フレームを正常にデコードして、私が間違っていることを確認しましたか? StackOverflow で 2 つの関連する質問を見つけましたが、その回答は問題の解決に役立ちませんでした。ただし、ここで受け入れられた回答によると、私のフレームは有効な mp3 チャンクとして認定され、デコードされる必要があります。

助けてくれてありがとう!

4

1 に答える 1

0

休憩といくつかの新鮮な目で驚異的に機能することが判明し、一般的なコードのクリーンアップで問題が解決しました。誰かがコードに興味を持っている場合は、ここで公開しました。

于 2012-12-14T10:17:55.503 に答える