我正在尝试找出一种捕获实时MP3音频流的方法,即网络广播/Icecast或Shoutcast,并将捕获的音频保存为定义的文件长度,即1小时音频文件或2小时音频文件。
我使用 bash 和 wget(使用网络服务器录制无线电/音频流 (asx/asf))在这个线程上发现了一些东西,但我想构建一个更可定制的 PHP 脚本,我可以通过 cron 作业触发。
我想使用类似 stream_get_contents() 的东西,但我以前从未使用过它。
有什么想法吗?
谢谢
这是我已经使用了一段时间的 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.asfrecording_001.asf等以及带有 mPlayer 输出的日志文件(如果您需要它)。我已将周期硬编码为 2 小时,但您可以轻松地更改它。
PHP 支持 Ogg/Vorbis 音频协议进行流式传输,如此处和此处所述。为了将 MP3 处理成流,我怀疑您需要使用 stream_wrapper_register
函数,访问像 mp3://domain.com/myfile.mp3
这样的文件,并创建一个类来处理流,就像 http://www.php.net/manual/en/function.stream-wrapper-register.php#77055 中的示例一样。