2016-11-01 4 views
2

Как бы я мог передавать потоковое аудио с одного устройства на другое через Интернет? Я в курсе отправки основных данных с помощью Java-сокетов, но интересно, как:Потоковая передача с устройства Android на другой

  1. Начало потокового на полпути через файл (скажем, в середине песни)
  2. Какой формат необходим для того, что данные послал. MediaPlayer может взять URL-адрес в качестве источника данных, так как должен отображаться звук при отправке со стороны сервера?

Благодаря

+0

Если вам нужна потоковая передача p2p, я действительно советую вам рассмотреть WebRTC. –

ответ

1

реализовав музыка потокового приложения, я могу поделиться немного с вами.

Если вы хотите использовать поток и использовать класс MediaPlayer для Android, MP3 или OGG - ваш лучший выбор для формата.

Если ваша архитектура является клиент-сервером, то есть реальным сервером в потоках интернет-обслуживания на устройствах Android, а затем просто передавайте MP3 или OGG-байты через HTTP. Просто укажите MediaPlayer на URL-адрес на вашем сервере.

Если ваша архитектура является одноранговой с вашим собственным кодом сокета, вы можете создать «прокси-сервер», который будет прослушивать локальный хост по выделенному потоку. Вы указываете свой экземпляр MediaPlayer на локальный сервер сокетов в процессе (например, http://localhost:54321/MyStream.mp3). Затем вам нужно реализовать код для разбора формы запроса HTTP-получения MediaPlayer, затем проксировать байты потока между вашим пользовательским протоколом сокетов P2P и слушателями, подключенными к вашему локальному HTTP-серверу. Многие приложения для радиопотока делают именно это, чтобы анализировать метаданные ICECAST из потока MP3. Here's the code I use for my radio streaming app это делает.

Для сценария «начать в середине файла» вы можете найти полезный мой MP3 Stream Reader class. Он обертывает InputStream (файл, поток сокетов и т. Д.) И синхронизируется со следующим допустимым фреймом, откуда вы начали. Просто позвоните read_next_chunk, чтобы получить следующий блок аудио и его формат. MediaPlayer может сделать большую часть этого тяжелого подъема для вас, поэтому это может и не понадобиться.

+0

Спасибо за ответ. Если я правильно понимаю вас, процесс должен запускать поток сокетов по локальному адресу, который принимает запрос GET из MediaPlayer, вынимает из него адрес клиента и пересылает данные потока из файла на этот адрес? Единственное, с чем я запутался, это прокси-сервер; как это построено для отправки данных внутри страны? – thegoldencanary

+0

На стороне прослушивания MediaPlayer подключается к 'http: // localhost: 12345'. У вас есть выделенный серверный поток, который прослушивает подключения на порту 12345. Когда поток медиаплеера подключается к вашему серверу в процессе, вы передаете ему аудио. Вы «получаете» аудио с другой стороны своим собственным протоколом сокета. – selbie

Смежные вопросы