Wie spiele ich im Browser (HTML/JS) einen Live -Stream von RAW -Opus -Paketen (2 -Byte -Länge)?Java

Java-Forum
Guest
 Wie spiele ich im Browser (HTML/JS) einen Live -Stream von RAW -Opus -Paketen (2 -Byte -Länge)?

Post by Guest »

Ich erfasse Opus -Rahmen, die vor der Verschlüsselung von einer Discord Lavalink -Gabel leben und sie auf die Festplatte fallen lassen (und/oder sie über WebSocket streamen). Jedes Paket ist geschrieben als: < /p>

Code: Select all

2‑byte big-endian length (N)
N bytes of Opus payload (48 kHz, ~20 ms per frame, Discord voice compatible)
< /code>
Beispiel Logik Schreiben Sie Logik (Kotlin, mit dem relevanten Teil begegnet): < /p>
override fun retrieveOpusFrame(buf: ByteBuf) {
// Duplicate the buffer to copy bytes for dumping
val ro = buffer.duplicate()
ro.flip()
val len = ro.remaining()
val bytes = ByteArray(len)
ro.get(bytes)

// Send frame to Discord
buf.writeBytes(buffer.flip())

// Dump frame to file: [2-byte big-endian length][Opus payload]
out.write((len ushr 8) and 0xFF)
out.write(len and 0xFF)
out.write(bytes)
}
Die resultierende .OpusDump -Datei ist nur eine Folge von RAW -Opus -Paketen (kein OGG/Webm -Container). Format-Hex ):

Code: Select all

00000000   00 03 FC FF FE 00 03 FC FF FE 00 03 FC FF FE 00
00000010   03 FC FF FE 00 03 FC FF FE 00 03 FC FF FE 00 03
00000020   FC FF FE 00 03 FC FF FE 00 03 FC FF FE 00 03 FC
00000030   FF FE 00 03 FC FF FE 00 03 FC FF FE 00 03 FC FF
Ich möchte dieses Audio in Echtzeit in einem einfachen HTML/JS-Front-End (Chrome/Firefox) abspielen, idealerweise durch Streaming von Paketen auf den Browser, während sie produziert werden. Im Idealfall würde der Browser die Wiedergabe direkt von RAW -OPUS -Frames oder kleinen Webm -Segmenten behandeln. Ich möchte die serverseitige Konvertierung oder Transkodierung vermeiden. Audio. Browser in Echtzeit? Können sie direkt an Web Audio/WebCodecs gefüttert werden oder müssen sie in einen Container wie WebM gewickelt werden? (SourceBuffer mit Typ 'audio/webm; codecs = opus')? Länge vorgefertigte rohe Opusrahmen direkt, oder wird ein kleiner Demuxer zuerst benötigt? /> Einschränkungen

Front-End: Plain HTML/JS (keine native App).>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post