Streaming Binary mit Node.js und WebSockets

8

Ich habe das gegoogelt und eine Zeitlang im stackoverflow nachgesehen, aber habe keine Lösung gefunden - daher der Post.

Ich spiele aus Neugier mit Node.js und WebSockets herum. Ich versuche einige binäre Daten (ein mp3) auf den Client zu streamen. Mein Code ist so weit unten, funktioniert aber offensichtlich nicht wie vorgesehen.

Ich vermute, dass mein Problem ist, dass ich binäre Daten nicht wirklich vom Server sende und mir eine Klarstellung / Hilfe wünschen würde.

Heres mein Server ...

%Vor%

Und mein Klient ...

%Vor%

Der Aufruf zum Decodieren endet immer im Fehlerrückruf. Ich nehme an, dies ist, weil es schlechte Daten empfängt.

Also meine Frage ist, wie kann ich die Datei korrekt als Binärdatei streamen?

Danke

    
fatlog 26.03.2013, 13:21
quelle

2 Antworten

0

Problem gelöst.

Ich habe dieses Problem mit einer Kombination aus dem Entfernen des Parameters "'encoding': 'binary'" aus den Optionen behoben, die an "createReadStream ()" und die Lösung an ...

übergeben wurden

decodeAudioData gibt einen Null-Fehler zurück

Laut einigen Kommentaren, als ich die createReadStream-Optionen aktualisierte, wurde der erste Chunk abgespielt, aber alle anderen Chunks führten den onError-Callback von decodeAudioData () aus. Die Lösung im obigen Link hat das für mich behoben. Es scheint, dass decodeAudioData () ein wenig wählerisch ist, wie die Chunks formatiert werden sollen. Sie sollten anscheinend gültige Stücke sein ...

Definieren Sie 'valid mp3 chunk' für decodeAudioData ( WebAudio API)

    
fatlog 28.03.2013, 10:12
quelle
3

Was Ihr Server macht, ist, dass er Nachrichten, die aus binären Audiodaten in 64-KByte-Blöcken bestehen, an Ihren Client sendet. Ihr Client sollte die Audiodatei vor dem Aufruf von decodeAudioData neu erstellen.

Sie rufen decodeAudioData jedes Mal an, wenn Ihr Client eine Nachricht auf Websocket empfängt. Sie müssen einen separaten Puffer erstellen, um alle Chunks hinzuzufügen. Nach Abschluss der Übertragung sollte der Puffer dann in decodeAudioData eingegeben werden.

Sie haben jetzt zwei Möglichkeiten:

  1. Sie laden die gesamte Datei (fs.read) ohne Streamereignisse und senden die gesamte Datei mit ws.send (leicht zu machen)
  2. Sie verwenden Stream-Ereignisse, ändern Ihren Client, um Datenblöcke zu akzeptieren, und fügen sie vor dem Aufruf von decodeAudioData zusammen.
user568109 26.03.2013 16:05
quelle

Tags und Links