원격으로 호스팅되는 CentOS 시스템에 오디오 프로세서를 설정하고 있습니다. 오디오 프로세서 자체는 명령줄 기반이며 작성자와 대화한 후 라이브 .WAV 스트림을 읽어 작동하며 라이브 .WAV도 출력한다고 설명했습니다.
이제 기본적으로 내 상황은 다음과 같습니다.
이 상자에는 포트 8000을 사용하는 Shoutcast 서버가 있습니다. Shoutcast 서버는 DJ의 연결 지점입니다.
청취자가 연결할 포트 8002를 사용하는 보조 Shoutcast 서버가 있습니다.
그 사이에 이 오디오 처리 도구를 사용하고 싶습니다. 포트 8000에서 첫 번째 Shoutcast 서버에 연결하고 오디오를 처리한 다음 포트 8002에서 서버로 보내야 합니다.
불행하게도 소프트웨어 작성자는 프로그램이 스스로 이 작업을 수행할 수 없다고 말했습니다. 그는 또한 내가 올바른 방법을 사용하는 한 이러한 상황이 가능하다고 말했습니다. 그는 다음과 같이 제안했습니다.
- 들어오는 스트림을 읽고 파이프하는 명령줄 도구:
- --decode 옵션을 사용하여 MP3 데이터를 WAV 형식(예: lame)으로 추출하는 명령줄 도구입니다.
- 스테레오 도구.
- WAV를 MP3 데이터(예: lame)로 인코딩하는 프로그램입니다.
- 스트리밍 프로그램은 파이프를 입력으로 처리할 수 있습니다.
1+2 단계는 "arecord"로 대체할 수 있습니다. "jack"을 사용하여 들어오는 스트림을 수신하고 재생하는 프로그램에 연결합니다.
마찬가지로 5단계는 "aplayer"로 대체할 수 있으며, "jack"을 사용하여 오디오 데이터를 스트리밍하는 프로그램에 연결합니다.
나는 그가 말하는 것을 이해합니다. GUI와 사운드 카드가 포함된 로컬 설치를 사용하면 이 작업을 수행할 수 있습니다.
주로 제가 어려움을 겪고 있는 것은 입력과 출력입니다.
답변1
나는 이전에 이 작업을 수행한 적도 없고 테스트해 본 적도 없으며 문서를 철저하게 읽어본 적도 없습니다. 저는 오디오/비디오 코덱이나 그와 유사한 분야의 전문가가 아닙니다. 따라서 이것은 다른 사람들이 자세히 설명할 수 있기를 바라는 "이 작품" 가이드에 가깝습니다.
나는 트릭을 수행할 수 있는 몇 가지 도구를 찾기 위해 Google에서 빠른 검색을 수행했습니다(명령줄 도구만 해당).
- 첫 번째 서버에서 오디오 스트림을 가져옵니다.
icecream
- mp3에서 wav로 디코딩:
lame
- 귀하의 스테레오 도구: (
stereo_tool
가정) - wav에서 mp3로 인코딩:
lame
- 오디오를 두 번째 서버로 전달합니다.
ezstream
이는 Shoutcast 서버가 동일한 상자에서 실행되고 있다고 가정합니다. stream2stream.sh
첫 번째 스크립트를 읽고, 처리하고, 두 번째 스크립트로 전달하는 쉘 스크립트를 생성하겠습니다 .
$ 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
ezstream
자신만의 인코딩/디코딩 절차를 정의함으로써 재인코딩이 지원됩니다 . 따라서 위의 스크립트는 아마도 불필요하며 ezstream
그 자체로 충분합니다. 하지만 저는 이 도구에 익숙하지 않으므로 이 구현에서는 가장 간단한 구성을 사용합니다.
$ 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>
lame 및 ezstream의 매개변수를 원하는 대로 조정해야 합니다. nohup을 사용하거나 화면에서 스크립트를 실행할 수 있습니다.
screen -AmdS stereotool stream2stream.sh