Потоковое аудио с Android на настольное приложение

То, что говорится в названии. Мне нужно передать аудио с микрофона на телефоне и воспроизвести его в настольном приложении (также Java-коде) на компьютере.

Использование UDP или TCP для меня не имеет значения, что лучше всего работает. Телефон и компьютер будут на одном и том же NAT, так что передача будет работать нормально.

У меня есть четкое представление о том, как отправить данные потока с устройства с помощью этого кода:

MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); String host = "10.0.2.2"; int port = 5740; Socket socket = null; try { socket = new Socket(InetAddress.getByName(host), port); ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); recorder.setOutputFile(pfd.getFileDescriptor()); recorder.prepare(); recorder.start(); Log.d(TAG, "Sending audio for 20 seconds.."); Thread.sleep(20000); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Проблема в том, как я могу воспроизвести этот поток в своем java-приложении на ПК? Или есть лучший способ передать звук?

Я заминировал в интернете информацию об этом, но без хороших результатов, но наверняка кто-то должен был это сделать раньше?

Заранее спасибо за любую помощь!

Я сделал что-то очень близкое к тому, что вы пытались сделать. Я использую gstreamer на своем сервере, слушая порт udp. Существует также сервер ретрансляции, написанный в java, который в принципе представляет собой не более чем loopback-сокет. Существует один серверный порт, который ждет подключения мобильных клиентов, после приема данных он выгружает их все, используя DatagramPackets (класс java для пакетов udp) в порт udp gstreamer. Единственный улов – найти подходящий декодер для вашего gstreamer-конвейера.

Можете ли вы написать клиент, который просто подключается к вашему телефону на этом порту и получает данные?

Теперь нет jpc-декодеров mp4, поэтому вам нужно будет использовать другой формат. Взгляните на некоторые примеры приложений с помощью JavaLayer или JOgg. Они оба работают с любым InputStream, поэтому пока вы можете открыть сокет, вы можете воспроизводить свой поток.

Кроме того, я не уверен в Android, но разве вам не нужно открывать ServerSocket и ждать соединений?