Как сыграть в прямом эфире с необработанными пакетами Opus (2 -Bete Be Dleny -Prefixed) в браузере (HTML/JS)?JAVA

Программисты JAVA общаются здесь
Anonymous
Как сыграть в прямом эфире с необработанными пакетами Opus (2 -Bete Be Dleny -Prefixed) в браузере (HTML/JS)?

Сообщение Anonymous »

Я захватываю рамки Opus вживую из вилки Lavalink Discord Lavalink перед шифрованием и сбрасываю их на диск (и/или транслируя их через WebSocket). Каждый пакет написан как: < /p>

Код: Выделить всё

2‑byte big-endian length (N)
N bytes of Opus payload (48 kHz, ~20 ms per frame, Discord voice compatible)
< /code>
Пример логики записи (kotlin, обрезанный соответствующей частью): < /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)
}
Полученный файл .opusdump -это просто последовательность необработанных пакетов Opus (no Ogg/webm incueter).
Пример .Opusdump (первые 64 байта, используя: get -content -path. Format-hex ):

Код: Выделить всё

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
Я хочу сыграть в это звук в режиме реального времени на простых фронтальных веществах HTML/JS (Chrome/Firefox), в идеале, потоковая пакеты в браузер, когда они производятся. В идеале, браузер будет обрабатывать воспроизведение непосредственно из необработанных рамков Opus или небольших сегментов Webm; Я хочу избежать преобразования или транскодирования на стороне сервера. Audio. < /P>
< /li>
[*] Я еще не пробовал контейнерирование или декодирование в JS /WASM, потому что я не уверен, с чего начать. < /P>
< /li>
< /ul>
Основной вопрос: < /p>

opress opres opres opres opres opres opres opre. Браузер в режиме реального времени? Могут ли они быть поданы непосредственно в веб-аудио/веб-кодекса, или их нужно обернуть в контейнер, такой как WebM? (SourceBuffer с типом 'audio/webm; codecs = opus')?

[*] Если декодирование клиентской стороны, какой лучший подход для обработки времени, буферизации и воспроизведения (например, с использованием wasm libopus или аналогичных)? Прямо на профик-кадрах с сырыми опусовыми опусами или сначала необходим небольшой демоксер? /> ограничения

Front-end: plain html/js (без нативного приложения).
Сервер: JVM (kotlin), но я открыт для маленького узла.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... xed-in-the

Вернуться в «JAVA»