웹캐스트에서 오디오 스트림 데이터를 읽고 임시 파일에 푸시합니다.

웹캐스트에서 오디오 스트림 데이터를 읽고 임시 파일에 푸시합니다.

원격으로 호스팅되는 CentOS 시스템에 오디오 프로세서를 설정하고 있습니다. 오디오 프로세서 자체는 명령줄 기반이며 작성자와 대화한 후 라이브 .WAV 스트림을 읽어 작동하며 라이브 .WAV도 출력한다고 설명했습니다.

이제 기본적으로 내 상황은 다음과 같습니다.

이 상자에는 포트 8000을 사용하는 Shoutcast 서버가 있습니다. Shoutcast 서버는 DJ의 연결 지점입니다.

청취자가 연결할 포트 8002를 사용하는 보조 Shoutcast 서버가 있습니다.

그 사이에 이 오디오 처리 도구를 사용하고 싶습니다. 포트 8000에서 첫 번째 Shoutcast 서버에 연결하고 오디오를 처리한 다음 포트 8002에서 서버로 보내야 합니다.

불행하게도 소프트웨어 작성자는 프로그램이 스스로 이 작업을 수행할 수 없다고 말했습니다. 그는 또한 내가 올바른 방법을 사용하는 한 이러한 상황이 가능하다고 말했습니다. 그는 다음과 같이 제안했습니다.

  1. 들어오는 스트림을 읽고 파이프하는 명령줄 도구:
  2. --decode 옵션을 사용하여 MP3 데이터를 WAV 형식(예: lame)으로 추출하는 명령줄 도구입니다.
  3. 스테레오 도구.
  4. WAV를 MP3 데이터(예: lame)로 인코딩하는 프로그램입니다.
  5. 스트리밍 프로그램은 파이프를 입력으로 처리할 수 있습니다.

1+2 단계는 "arecord"로 대체할 수 있습니다. "jack"을 사용하여 들어오는 스트림을 수신하고 재생하는 프로그램에 연결합니다.

마찬가지로 5단계는 "aplayer"로 대체할 수 있으며, "jack"을 사용하여 오디오 데이터를 스트리밍하는 프로그램에 연결합니다.

나는 그가 말하는 것을 이해합니다. GUI와 사운드 카드가 포함된 로컬 설치를 사용하면 이 작업을 수행할 수 있습니다.

주로 제가 어려움을 겪고 있는 것은 입력과 출력입니다.

답변1

나는 이전에 이 작업을 수행한 적도 없고 테스트해 본 적도 없으며 문서를 철저하게 읽어본 적도 없습니다. 저는 오디오/비디오 코덱이나 그와 유사한 분야의 전문가가 아닙니다. 따라서 이것은 다른 사람들이 자세히 설명할 수 있기를 바라는 "이 작품" 가이드에 가깝습니다.

나는 트릭을 수행할 수 있는 몇 가지 도구를 찾기 위해 Google에서 빠른 검색을 수행했습니다(명령줄 도구만 해당).

  1. 첫 번째 서버에서 오디오 스트림을 가져옵니다.icecream
  2. mp3에서 wav로 디코딩:lame
  3. 귀하의 스테레오 도구: ( stereo_tool가정)
  4. wav에서 mp3로 인코딩:lame
  5. 오디오를 두 번째 서버로 전달합니다.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

관련 정보