2013-10-22 92 views
2

我試圖找出一種方法來捕獲一個活的MP3音頻流,即互聯網廣播/ Icecast或Shoutcast,並保存捕獲的音頻定義的文件長度,所以1小時的音頻文件或2小時音頻文件。捕獲一個活的MP3音頻流文件

我發現使用bash和wget(Record radio/audio stream (asx/asf) with a webserver)這個線程的東西,但我想建立一個PHP腳本,更可定製的,我可以通過cron作業觸發。

我想到了像stream_get_contents()這樣的東西,但我從來沒有用過它。

任何想法?

由於

回答

0

PHP支持針對流所討論herehere對Ogg/Vorbis音頻協議。爲了將MP3工作到流中,我懷疑您需要使用stream_wrapper_register函數,訪問像mp3://domain.com/myfile.mp3這樣的文件,並創建一個類來處理流,如http://www.php.net/manual/en/function.stream-wrapper-register.php#77055中的示例。

+0

謝謝,但澄清我想捕捉音頻流,而不是流音頻文件。我已經修改了這個問題來澄清這個問題。 – mattauckland

1

這是我一直在使用了一段時間

#!/bin/bash                                           

ls *asf &> /dev/null                
if [[ $? -eq 0 ]]; then               
    CNT=$(ls *asf | tail -1 | perl -p -i -e 's/recording_0*(\d*).*/$1/'); 
else                    
    CNT=0;                  
fi                    

while true; do                 
    NAME=recording_$(printf "%03d" $CNT);         
    if [[ -f $NAME.asf ]]; then             
     CNT=$[ $CNT + 1 ];              
     continue;                
    fi                   
    echo "recording $NAME";              
    mplayer "http://your.stream.goes.here" -dumpstream -dumpfile $NAME.asf &> $NAME.log & 
    sleep 2h;                 
    killall mplayer;                
    CNT=$[ $CNT + 1 ];               
done 

這將產生錄音具有下列名稱 recording_000.asf recording_001.asf 等 並與mplayers輸出日誌文件的bash腳本(萬一你需要它)。 我已經將時間段硬編碼爲2h,但您可以輕鬆更改該時間段。

+0

我在網站上遇到過這個問題,但我正在尋找一個純粹的PHP解決方案,因爲我在服務器上運行的安全軟件限制了bash。作爲一個純粹的PHP解決方案,它也可以用於一個更大的項目。不管怎麼說,還是要謝謝你 :) – mattauckland