2

我正在尝试制定一种捕获实时 MP3 音频流的方法,即互联网广播/Icecast 或 Shoutcast,并将捕获的音频保存为定义的文件长度,即 1 小时音频文件或 2 小时音频文件。

我使用 bash 和 wget 在这个线程上找到了一些东西(使用网络服务器记录广播/音频流(asx/asf)),但我想构建一个更可定制的 PHP 脚本,并且我可以通过 cron 作业触发。

我想使用类似 stream_get_contents() 的东西,但我以前从未使用过它。

有任何想法吗?

谢谢

4

2 回答 2

2

这是我已经使用了一段时间的 bash 脚本

#!/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 输出的日志文件(以备不时之需)。我已将时间段硬编码为 2h,但您可以轻松更改它。

于 2013-10-23T11:39:44.040 回答
0

PHP 支持此处此处讨论的用于流式传输的 Ogg/Vorbis 音频协议。为了将 MP3 工作到流中,我怀疑您需要使用该stream_wrapper_register函数,访问类似的文件mp3://domain.com/myfile.mp3,并创建一个类来处理流,如http://www.php.net/manual/en/function中的示例.stream-wrapper-register.php#77055

于 2013-10-22T15:10:49.567 回答