Потоковое аудио с Android на настольное приложение - PullRequest
4 голосов
/ 01 декабря 2010

Что действительно говорит название. Мне нужно прослушать звук с микрофона на телефоне и воспроизвести его в настольном приложении (также код 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-приложении на ПК? Или есть лучший способ для потоковой передачи звука?

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

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

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

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

1 голос
/ 01 декабря 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...