Основная идея - создать приложение, которое может записывать аудио с одного устройства и отправлять его через Wlan, используя сокеты на другое устройство, которое будет воспроизводить его. В двух словах программа голосовой чаты Lan.Android: ручная потоковая передача звука с использованием AudioTrack и Socket
Я записываю живое аудио с микрофона с помощью объекта AudioRecord, а затем считываю записанные данные в массив байтов, а затем записываю массив байтов в сокет TCP. Затем принимающее устройство считывает этот массив байтов из сокета и записывает его в буфер объекта AudioTrack.
его как
Audio Record -> массив -> гнездо ---> LAN ---> розетка -> массив байт -> AudioTrack
Процесс повторяют, используя время петли.
Несмотря на то, что звук воспроизводится там, где он находится между кадрами. когда я говорю «Привет», приемник слышит He-ll-O. Хотя звук завершен, но есть промежуток между буферными блоками.
Насколько я знаю, что задержка происходит из-за задержки в передаче Lan
Как это исправить? Какой подход следует использовать, чтобы он был гладким, как в коммерческих онлайн-чатах, таких как skype и gtalk?
Но буфер не начнет уменьшаться, поскольку звук будет подаваться с большей скоростью, чем он поступает – Allahjane
Буфер будет уменьшаться по мере появления буферов. Но нужно также заполнить резервную копию, поскольку в конце концов приходят. Одна вещь, о которой стоит подумать, - это согласование времени подачи буфера в сеть с частотой дискретизации записанного звука. Другое дело, что вы можете получить буферы из строя. Таким образом, ваша задержка перед воспроизведением звука в приемнике должна быть достаточно щедрым, чтобы иметь время с этим. – Ehz