2012-06-07 18 views
6

Ich arbeite derzeit an einem Projekt, das HTML5-Audio verwendet, und wir haben Probleme mit den Einschränkungen auf iOS-Geräten (meist mehrere Audiokanäle Einschränkung).Verwenden von Node.js zum Streamen von Audio zu html5-Audio-Tag und Umgehen der iOS-Einschränkung

Ich dachte, dass es möglich sein könnte, die Sounds serverseitig mit node.js zu steuern. Der Client würde sich mit einer einzigen Audio-URL verbinden und der Node-Server würde Live-Klänge über diesen einzelnen Kanal streamen und alle Mischungen und Übergänge live auf dem Server durchführen.

Ist es technisch möglich? Kannst du Audio auf node.js analysieren und live mischen? Glauben Sie, dass der Server mit mehr als 5 gleichzeitigen Clients explodieren wird?

Dank

+0

Was Sie nicht durch Vor- Verarbeitung der Audio-Datei durchgeführt werden, dass kann zu erreichen hoffen? –

+0

@SamDufel zum Beispiel, ein konstanter Hintergrundsound mit anderen Sounds, die durch Klicken aktiviert werden können. Eigentlich werden wir eine Pre-Processing-Lösung für dieses spezielle Projekt verwenden, aber ich dachte, dass es eine Lösung für Echtzeit/dynamische Erfahrungen sein könnte. –

+0

Interessant ... Ich bin mir nicht sicher, ob das aufgrund von Cache-Problemen möglich ist. –

Antwort

4

Ja, das ist durchaus möglich, aber als Sam darauf hingewiesen, Pufferung ist ein Problem. Es gibt erhebliche Verzögerung, die über mehrere Punkte aufbaut:

  • Erste Steuerbefehle von Client
  • Mixing rohe PCM-Audiodaten in einem internen Puffer
  • Encoding Daten mit dem richtigen Codec (erfordert, dass Sie diese in Stücke zu tun)
  • Senden von Audiodaten
  • Buffering clientseitige
  • Wiedergabepuffer auf clientseitige

Fügen Sie das alles hinzu, und selbst wenn Sie es sehr schnell arbeiten, sehen Sie immer noch ein paar Sekunden Verzögerung.

Wenn Sie sich für diese Route entscheiden, benötigen Sie eine externe Anwendung (oder schreiben Sie Ihre eigene Node-Erweiterung), um das Mischen und Kodieren für Sie durchzuführen. Sox ist wahrscheinlich eine gute Wahl, und FFMPEG enthält viele Codecs für Ihre Verwendung. Sie können beide über STDIO verwenden.

In Bezug auf Serverlast ... ist dies keine leichte Art von Prozess, aber Sie müssten es profilieren, um zu sehen, wie schlimm es wirklich ist. Ich schlage vor, dass Sie andere Versuche machen, mehrere Audiostreams gleichzeitig auf der Client-Seite abzuspielen, bevor Sie etwas Ähnliches versuchen.

+0

Warum nicht verwenden Lame? @TooTallNate hat dafür einen schönen Wrapper geschrieben, https://github.com/TooTallNate/node-lame – EaterOfCode

+1

@EaterOfCorpses, LAME ist nur ein MP3-Codec. Wenn Sie eine breitere Browserunterstützung wünschen, müssen Sie mehr als MP3 unterstützen.Darüber hinaus baut FFMPEG häufig LAME als möglichen Codec auf, so dass Sie FFMPEG genauso gut verwenden können, um eine bessere Unterstützung zu erhalten. – Brad

+0

Klingt logisch. – EaterOfCode

Verwandte Themen