2010-04-28 2 views
1

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

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

    int pos=1; 
    String x; 
    String y; 

While (cn.getHeaderField (поз) ! = null) { x = cn.getHeaderFieldKey (pos); y = cn.getHeaderField (x); Log.e (":::::", "" + x + ":" + y); pos ++; }

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

Content-Type: аудио/MPEG ледяного уш: 64 льда аудио-информация: лед дискретизация = 22050; лед битрейт = 64; лед-каналы = 2 ледяной уш: 64 ледяного описания: радиостанция ледяной жанр: Классическое, Новый век, Окружающий ледяного имя: радиостанция Пример ледяных-частное: 0 icy- pub: 1 icy-url: http://exampleradio.com сервер: Icecast 2.3.2 кэш-контроль: нет кэша

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

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

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

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

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

Все я получаю возвращенный нуль.

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

ответ

1

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

0

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

+1

MediaPlayer не поддерживает или, по крайней мере, не поддерживает поток, который я использовал. – stealthcopter