Centos

從網路電台讀取音頻流數據並將其推送到臨時文件

  • March 20, 2019

我正在遠端託管的 CentOS 機器上設置音頻處理器。音頻處理器本身是基於命令行的,在與作者交談後,他向我解釋說它通過讀取實時 .WAV 流來工作,並且它也輸出實時 .WAV。

現在基本上,我的情況是這樣的:

我在這個盒子上有一個使用埠 8000 的直播伺服器。這個直播伺服器是 DJ 的連接點。

我有一個使用監聽器將連接的埠 8002 的輔助直播伺服器。

在這兩者之間,我想使用這個音頻處理工具。它需要連接到埠 8000 上的第一個直播伺服器,處理音頻,然後將其發送到埠 8002 上的伺服器。

不幸的是,該程序無法自行執行此操作,因此軟體作者告訴我。他還表示,只要我使用正確的方法,這種情況是可行的。他建議如下:

  1. 讀取傳入流並將其通過管道傳輸到的命令行工具:
  2. 將 MP3 數據提取為 WAV 格式的命令行工具,例如帶有選項 –decode 的 lame。
  3. 立體聲工具。
  4. 將 WAV 編碼為 MP3 數據的程序,例如 lame。
  5. 流式傳輸的程序,它可以將管道作為輸入處理。

步驟 1+2 可以替換為:“arecord”,使用“jack”連結到接收和播放傳入流的程序

類似地,步驟 5 可以替換為:“播放器”,使用“插孔”連結到流式傳輸音頻數據的程序。

我確實理解他所說的話,如果我使用帶有 GUI 和音效卡的本地安裝,我可能會這樣做。

主要是我在苦苦掙扎的輸入和輸出。

我以前沒有這樣做過,也沒有測試過,也沒有徹底閱讀過相應的文件。而且我不是音頻/影片編解碼器和其他東西的專家。所以這更像是一個“這可以工作”的指南,希望其他人可以詳細說明。

我在 google 上進行了快速搜尋,試圖找出一些可以滿足要求的工具(僅限命令行工具)。

  1. 從第一台伺服器獲取音頻流:icecream
  2. 從 mp3 解碼到 wav:lame
  3. 你的立體聲工具:(stereo_tool假設)
  4. 從 wav 到 mp3 的編碼:lame
  5. 將音頻轉發到第二個伺服器:ezstream

假設您的廣播伺服器已啟動並在同一個框中執行。我們將製作一個 shell 腳本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

引用自:https://unix.stackexchange.com/questions/9970