Lendo dados de fluxo de áudio do rádio da Internet e empurrando-os para o arquivo temporário

1

Estou no processo de configurar um processador de áudio em minha caixa CentOS hospedada remotamente. O processador de áudio em si é baseado em linha de comando, e depois de falar com o autor, ele me explicou que ele funciona lendo em um stream .WAV ao vivo, e produz um live .WAV também.

Agora, basicamente, o cenário que tenho é este:

Eu tenho um servidor shoutcast nesta caixa usando a porta 8000. Esse servidor shoutcast é o ponto em que o DJ se conecta.

Eu tenho um servidor shoutcast secundário usando a porta 8002, onde os ouvintes se conectam.

Entre eles, eu gostaria de usar essa ferramenta de processamento de áudio. Ele precisaria se conectar ao primeiro servidor shoutcast na porta 8000, processar o áudio e enviá-lo ao servidor na porta 8002.

O programa não pode fazer isso por conta própria, infelizmente, então eu sou informado pelo autor do software. Ele também afirmou que esse cenário é viável, desde que eu use o método correto. Ele sugeriu algo como o seguinte:

  1. Command line tool that reads the incoming stream, and pipes it to:
  2. Command line tool that extracts the MP3 data to WAV format, for example lame with option --decode.
  3. Stereo Tool.
  4. Program that encodes WAV to MP3 data, for example lame.
  5. Program that streams this, which can handle a pipe as input.

Step 1+2 could be replaced by: 'arecord', linked using 'jack' to a program that receives and plays an incoming stream

Similarly, step 5 could be replaced by: 'aplayer', linked using 'jack' to a program that streams audio data.

Eu entendo o que ele disse, e eu poderia fazer isso se eu estivesse usando uma instalação local com uma GUI e uma placa de som. Mas, por não estar muito familiarizado com a linha de comando do Linux e por não ter uma placa de som, não sei como algo assim poderia ser implementado.

Estou totalmente perdido para ser honesto e gostaria de receber algumas dicas do guru do Linux sobre como configurar algo assim. É principalmente a entrada e saída que eu estou lutando com.

Agradecemos antecipadamente por qualquer ajuda.

Dave

    
por Dave 23.03.2011 / 17:26

1 resposta

1

Eu não fiz isso antes, nem o testei nem leiai a documentação apropriada. E eu não sou um especialista em codecs de áudio / vídeo e coisas assim. Portanto, este é mais um guia "isso poderia funcionar" e espero que outros possam elaborar.

Eu fiz uma pesquisa rápida no google, tentando descobrir algumas ferramentas que cobrirão os requisitos (apenas ferramentas de linha de comando).

  1. Obtendo o fluxo de áudio do primeiro servidor: icecream
  2. Decodificando de mp3 para wav: lame
  3. Sua ferramenta estéreo: stereo_tool (hipoteticamente)
  4. Codificação de wav para mp3: lame
  5. Encaminhando o áudio para o segundo servidor: ezstream

Supondo que seus servidores de shoutcast estejam funcionando na mesma caixa. Faremos um script de shell stream2stream.sh que lerá do primeiro, processará e encaminhará para o segundo.

$ chmod 750 stream2stream.sh
$ cat stream2stream.sh
#!/bin/bash

icecream --stdout http://localhost:8000 | \
lame -decode - - | \
stereo_tool | \
lame --preset cbr 128 -r -s 44.1 --bitwidth 16 - - | \
ezstream -c ~/ezstream.xml

Observe que ezstream suporta a re-codificação, permitindo que você defina seus próprios programas de codificação / decodificação. Portanto, meu script acima pode ser desnecessário e ezstream pode ser suficiente por si só. Mas eu não estou familiarizado com essa ferramenta e, portanto, nesta implementação, temos a configuração mais simples.

$ cat ~/ezstream.xml
<ezstream>
    <url>http://localhost:8002</url>
    <sourcepassword>hackme</sourcepassword>
    <format>MP3</format>
    <filename>stdin</filename>
    <stream_once>1</stream_once>

    <svrinfoname>My Stream</svrinfoname>
    <svrinfourl>http://yoursiteurl/</svrinfourl>
    <svrinfogenre>YourGenre</svrinfogenre>
    <svrinfodescription>This is a stream description</svrinfodescription>
    <svrinfobitrate>128</svrinfobitrate>
    <svrinfoquality>2.0</svrinfoquality>
    <svrinfochannels>2</svrinfochannels>
    <svrinfosamplerate>44100</svrinfosamplerate>
    <!-- Disallow the server to advertise the stream on a public YP directory: -->
    <svrinfopublic>0</svrinfopublic>
</ezstream>

Você terá que ajustar os parâmetros no lame e no ezstream para seus gostos. Você pode executar o script com nohup ou na tela.

screen -AmdS stereotool stream2stream.sh
    
por 24.03.2011 / 15:36