Трансляция на Icecast / SHOUTcast с Objective-C, C или C ++ - PullRequest
8 голосов
/ 11 февраля 2012

Я хочу предоставить аудиоданные на серверы SHOUTcast или Icecast без использования их собственного вещателя, поскольку я буду использовать его на различных платформах, включая мобильные.

Мне нужны описания протоколов, проекты с открытым исходным кодом или примеры дляуметь отправлять аудиоданные (с микрофона или из файла) с помощью Objective-C, C или C ++ на серверы SHOUTcast и Icecast.

Где я могу найти информацию, необходимую для создания правильного исходного клиента SHOUTcast / Icecast?

Ответы [ 2 ]

12 голосов
/ 11 февраля 2012

Комментарий: давно пора создать исходный клиент SHOUTcast для мобильных устройств. Некоторое время я нуждался в этом, но у меня нет времени, чтобы построить его, так что слава тебе. Пожалуйста, сделайте версию для Android в какой-то момент.

Первое, что вам нужно сделать, это скачать Wireshark .

Запустите захват пакета, запустите сервер SHOUTcast, затем запустите исходный клиент и подключите его к серверу. Будьте готовы к ужасающей простоте этого протокола.

Первичный аудио протокол

  1. Исходный клиент подключается к SHOUTcast по TCP. Используйте порт один от базового порта. Например, если ваш базовый порт 8000, ваши слушатели подключаются к 8000, а вы подключаетесь к 8001.
  2. После подключения сервер SHOUTcast ничего не скажет. Просто отправьте пароль трансляции, а затем новый CrLf (или \r\n).
  3. Если пароль неверный, он скажет invalid password или что-то в этом роде. Если это правильно, вы получите что-то вроде этого:

    OK2

    icy-caps:11

    Обратите внимание, что после каждой строки есть CrLf, а после отправки этих двух заголовков есть пара CrLf.

  4. Теперь исходный клиент должен отправить несколько заголовков: icy-name, icy-genre, icy-pub, icy-br, icy-url, icy-irc, icy-icq, icy-aim, content-type. Отправь их так:

    icy-name:My Awesome Station

    После каждой строки следует CrLf, и после того, как вы закончите отправку всех заголовков, отправьте пару CrLf.

  5. Как только все это будет сделано, начните отправлять данные вашего потока! Не нужно начинать с какого-то конкретного места, просто отправьте данные. Это зависит от клиентов на принимающей стороне для синхронизации с кадром. Сервер SHOUTcast полностью «туп» для трафика, проходящего через него. Вы можете подключиться к клиенту Telnet и отправить текст, если хотите.

Обновление метаданных

Итак, вам, наверное, интересно, как вы отправляете информацию для следующего трека, а что нет. Самое смешное, что это совершенно вне диапазона соединения, по которому вы отправляете аудиоданные.

Все, что вам нужно сделать, это сделать веб-запрос к базе портов (8000 в нашем примере):

http://yourserver:8000/admin.cgi?pass=yourpassword&mode=updinfo&song=your%20song&url=some_url_goes_here_but_hardly_any_clients_use_it

В случае, если это трудно читать, это параметры:

  • 1070 * передача *
  • режим
  • песня
  • 1076 * URL *

Вы заметите, что эти и другие параметры можно найти в административной панели SHOUTcast.

0 голосов
/ 09 марта 2018

Я разработал собственные C-файлы оболочки shoutcast вместе с образцом приложения для Android, которое можно передавать с микрофона устройства -> android-icecast-broadcast .

Захватывает, кодирует аудиосигнал с микрофона. и транслирует ледяной сервер.

...