Код: Выделить всё
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 (первые 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
< /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