как получить информацию о новой песне при получении метаданных из потока shoutcast - PullRequest
2 голосов
/ 29 сентября 2011

Справочная информация: Я транслирую радио с использованием подхода двойной буферизации для html shoutcast. Я получаю метаданные из потока, используя http://www.smackfu.com/stuff/programming/shoutcast.html

Задача У меня три проблемы.
1- Я уже использую соединение и входящий поток для прослушивания радио. Я не хочу открывать новое соединение для получения метаданных. Но когда я попытался получить оба из одного входного потока, я больше не мог слушать радио. Я думаю, что это невозможно, и я должен использовать два отдельных соединения? Разве это не плохо для производительности?

2 - При запуске приложения я получаю информацию о текущей песне. Нет проблем. Однако, как мне получить информацию, когда песня меняется. Говорят, что сервер отправит информацию, когда песня изменится. Но я запускаю соединение URL, получаю поток ввода, извлекаю метаданные и закрываю соединение. Я не мог понять, как я должен сообщить на сервере? Должен ли я держать соединение открытым?

3- И последний вопрос. AFAIK прогрессивная потоковая передача невозможна до Android 2.2. Это правда только для http? Если протокол был RTSP, я мог сделать прогрессивную потоковую передачу до Android 2.2? Кто-нибудь, пожалуйста, сделайте это точно и ясно?

Большое спасибо,

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011
  1. Вы не должны открывать новое соединение для метаданных. Метаданные интегрированы в поток MP3 (все это описано в указанной вами ссылке).
  2. Если вы закроете соединение, очевидно, вы больше не сможете ни получать поток MP3, ни метаданные.
  3. См .: Потоковое аудио с URL в Android с помощью MediaPlayer?
2 голосов
/ 29 сентября 2011

Вы должны запомнить номер из поля заголовка icy-metaint.

После получения такого количества байтов из потока (который вы отправляете в аудиодекодер) вы должны ожидать часть метаданных и читать ее (также не отправляя эти данные в аудиодекодер). Затем вы снова получаете закодированное аудио из потока и продолжаете процесс периодического чтения метаданных после байтов icy-metaint.

Это означает, что сервер периодически отправляет метаданные (информацию об исполнителе / ​​названии песни), и ваш код должен разделять входной поток на аудио и метаданные.

...