從網路電台讀取音頻流數據並將其推送到臨時文件
我正在遠端託管的 CentOS 機器上設置音頻處理器。音頻處理器本身是基於命令行的,在與作者交談後,他向我解釋說它通過讀取實時 .WAV 流來工作,並且它也輸出實時 .WAV。
現在基本上,我的情況是這樣的:
我在這個盒子上有一個使用埠 8000 的直播伺服器。這個直播伺服器是 DJ 的連接點。
我有一個使用監聽器將連接的埠 8002 的輔助直播伺服器。
在這兩者之間,我想使用這個音頻處理工具。它需要連接到埠 8000 上的第一個直播伺服器,處理音頻,然後將其發送到埠 8002 上的伺服器。
不幸的是,該程序無法自行執行此操作,因此軟體作者告訴我。他還表示,只要我使用正確的方法,這種情況是可行的。他建議如下:
- 讀取傳入流並將其通過管道傳輸到的命令行工具:
- 將 MP3 數據提取為 WAV 格式的命令行工具,例如帶有選項 –decode 的 lame。
- 立體聲工具。
- 將 WAV 編碼為 MP3 數據的程序,例如 lame。
- 流式傳輸的程序,它可以將管道作為輸入處理。
步驟 1+2 可以替換為:“arecord”,使用“jack”連結到接收和播放傳入流的程序
類似地,步驟 5 可以替換為:“播放器”,使用“插孔”連結到流式傳輸音頻數據的程序。
我確實理解他所說的話,如果我使用帶有 GUI 和音效卡的本地安裝,我可能會這樣做。
主要是我在苦苦掙扎的輸入和輸出。
我以前沒有這樣做過,也沒有測試過,也沒有徹底閱讀過相應的文件。而且我不是音頻/影片編解碼器和其他東西的專家。所以這更像是一個“這可以工作”的指南,希望其他人可以詳細說明。
我在 google 上進行了快速搜尋,試圖找出一些可以滿足要求的工具(僅限命令行工具)。
- 從第一台伺服器獲取音頻流:
icecream
- 從 mp3 解碼到 wav:
lame
- 你的立體聲工具:(
stereo_tool
假設)- 從 wav 到 mp3 的編碼:
lame
- 將音頻轉發到第二個伺服器:
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