Стрим голоса через микрофон на сервер 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))
}
}