Transmitir para Icecast / SHOUTcast com Objective-C, C ou C ++

Eu quero fornecer dados de áudio em servidores SHOUTcast ou Icecast sem usar sua própria emissora, uma vez que eu vou estar usando isso em várias plataformas, incluindo móveis.

Eu preciso de descrições de protocolos, projetos de código aberto ou amostras para poder enviar dados de áudio (do microfone ou arquivo) usando Objective-C, C ou C ++ para os servidores SHOUTcast e Icecast.

Onde posso encontrar as informações necessárias para criar um cliente de origem SHOUTcast / Icecast adequado?

Comentário: Já é hora de alguém fazer um cliente de origem SHOUTcast para celular. Eu tenho precisado disso por um tempo, mas não tenho tempo para construí-lo, então eu agradeço a você. Por favor, faça uma versão do Android em algum momento.

A primeira coisa que você deve fazer é baixar o Wireshark .

Inicie a captura de pacotes, ative um servidor SHOUTcast, acione um cliente de origem e conecte-o ao servidor. Esteja preparado para a simplicidade horripilante deste protocolo.

Protocolo de áudio principal

  1. O cliente de origem se conecta ao SHOUTcast com o TCP. Use a porta acima da porta base. Por exemplo, se sua porta base for 8000, seus ouvintes se conectam no 8000 e você se conectará no 8001.
  2. Uma vez conectado, o servidor do SHOUTcast não diz nada. Basta enviar a senha de transmissão, seguida por um novo CrLf (ou \r\n ).
  3. Se a senha estiver errada, ele dirá uma invalid password ou algo assim. Se estiver correto, você vai conseguir algo assim:

    OK2

    icy-caps:11

    Note que cada linha tem CrLf após ela, e depois que esses dois headers são enviados, há um par de CrLf .

  4. Agora, cabe ao cliente de origem enviar vários headers: icy-name icy-genre , icy-pub , icy-br , icy-url , icy-irc , icy-icq , icy-aim , content-type . Envie-os assim:

    icy-name:My Awesome Station

    Cada linha deve ser seguida por CrLf , e depois que você terminar de enviar todos os headers, envie um par de CrLf .

  5. Quando tudo isso estiver concluído, comece a enviar seus dados de stream! Não há necessidade de começar em nenhum ponto específico, apenas envie dados. Cabe aos clientes na extremidade de recepção sincronizar com o quadro. O servidor SHOUTcast é completamente “burro” para o tráfego que passa por ele. Você pode se conectar com um cliente Telnet e enviar um monte de texto, se você quisesse.

Atualizando Metadados

Então, você provavelmente está se perguntando como você envia informações para a próxima faixa e quais não. O engraçado é que isso é totalmente fora da banda da conexão onde você envia dados de áudio.

Tudo o que você precisa fazer é fazer uma solicitação da web para a base da porta (8000 em nosso exemplo):

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

No caso de ser difícil ler, estes são os parâmetros:

  • passar
  • modo
  • canção
  • url

Você notará que esses mesmos parâmetros, e outros, podem ser encontrados no painel de administração do SHOUTcast.

Eu desenvolvi arquivos C nativo de wrapper shoutcast juntamente com um aplicativo android de amostra que você pode transmitir do microfone do dispositivo -> android-icecast-broadcast .

É captura, codifica o áudio pcm do microfone. e transmite servidor de gelo.