Стрим голоса через микрофон на сервер okhttp

Задача следующая. Необходимо с Android смартфона через микрофон записывать звук и сразу же отправлять на сервер через веб-сокеты. То есть отправка должна осуществляться в режиме реального времени, пока работает микрофон. Получается такой себе стриминг. Сервер принимает данные в виде строки либо строки байтов. Я пробовал такой алгоритм. В цикле записываем звук с помощью класса AudioRecord в буфер байтов, а затем считываем данные из буфера и отправляем на сервер. Используется okhttp3. Отправляю кусками по 2 кБ. Весь код показать не могу, показываю только часть записи и отправки. На сервер эти данные снова должны трансформироваться в голос и наложиться на песню. Полученный результат сразу рассылается другим смартфонам, подписанным на обновления. То есть такое себе радио. Не могли бы вы подсказать, что не так с моим кодом? На выходе голос не слышно. Спасибо.

private val min = AudioRecord.getMinBufferSize(
    sampleRate,
    AudioFormat.CHANNEL_IN_MONO,
    AudioFormat.ENCODING_PCM_16BIT
)
private var audiorecord = AudioRecord(
    MediaRecorder.AudioSource.MIC,
    sampleRate,
    AudioFormat.CHANNEL_IN_MONO,
    AudioFormat.ENCODING_PCM_16BIT,
    min
)

private val url = "wss://web-socket.url.com/web-socket/"
private val okHttpClient = OkHttpClient()
private val request: Request = Request.Builder().url(url).build()
lateinit var socket: WebSocket

private var status = true

fun startStream() {
    this.socket = okHttpClient.newWebSocket(request, this)
    audiorecord.startRecording()

    while (status) {
        val bufferSize = 2048
        val buffer = ByteArray(bufferSize)
        audiorecord.read(buffer, 0, buffer.size)
        socket.send(ByteString.of(*buffer))
    }
}

Ответы (0 шт):