Android потоковой передачи с сервера Icecast получить информацию о треке - PullRequest
1 голос
/ 28 апреля 2010

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

 URLConnection cn = new URL(mediaUrl).openConnection();   
    cn.connect();   

    int pos=1;
    String x;
    String y;

while (cn.getHeaderField (pos)! = Null) { х = cn.getHeaderFieldKey (позы); y = cn.getHeaderField (x); Log.e (":::::", "" + x + ":" + y); пос ++; }

Когда я делаю это, все заголовки, которые я получаю, отображаются как:

тип контента: аудио / MPEG ледяной br: 64 ice-audio-info: частота дискретизации льда = 22050, битрейт льда = 64; каналы льда = 2 ледяной br: 64 ледяное описание: RadioStation icy-жанр: классический, нью эйдж, эмбиент icy-name: RadioStation Пример частный лед: 0 ледяной паб: 1 URL-адрес: http://exampleradio.com сервер: Icecast 2.3.2 управление кешем: без кеша

Однако, если я открою свой поток в mplayer, я получу:

 ICY Info: StreamTitle='artist - album - trackname' 

и каждый раз, когда песня меняется, информация о новой дорожке отправляется в mplayer одинаково.

В Android, когда я пытаюсь прочитать ледяную информацию, все, что я получаю, является нулевым. Кроме того, как мне получить новую информацию из заголовков, пока я буферизирую из потока? Потому что даже если я попытаюсь прочитать заголовок чего-то, что я уже знаю, существует во время буферизации, например:

  Log.e(getClass().getName()," "+cn.getHeaderField("icy-br"));

Все, что мне возвращают, равно нулю.

Надеюсь, это имеет смысл, я могу выложить больше кода по запросу.

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Я понимаю, что этот вопрос старый, но для тех, кто сталкивается с этой проблемой, я использую этот проект: http://code.google.com/p/streamscraper/, чтобы получить информацию о треках из потока ледяных сводок.Я использую его на Android, и пока он работает, как ожидалось.

0 голосов
/ 19 ноября 2010

Все, что вам нужно, это установить setDataSource () и передать URL-адрес в виде строки, затем вы должны подготовить Async () и использовать mp.setOnPreparedListener (this); и т. д. вы будете замечены, когда MediaPlayer закончит буферизацию, тогда все, что вам нужно сделать, это mp.start (); P.S .: Не забудьте mp.stop, mp.reset и mp.release после уничтожения приложения. ;) Я все еще думаю о способе чтения информации ICY ... Я должен либо создать свой собственный механизм буферизации и записать файл буфера (инициировать MediaPlayer с FileDescriptor), либо время от времени устанавливать отдельное соединение для проверки Информационные теги ICY и закрыть соединение ... Есть идеи лучше?

...