【问题标题】:Capturing a live MP3 audio stream to file将实时 MP3 音频流捕获到文件
【发布时间】:2013-10-31 12:52:26
【问题描述】:

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

我在这个线程上使用 bash 和 wget (Record radio / audio stream (asx/asf) with a webserver) 找到了一些东西,但我想构建一个更可定制的 PHP 脚本,并且我可以通过 cron 作业触发。

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

有什么想法吗?

谢谢

【问题讨论】:

    标签: php bash audio streaming mp3


    【解决方案1】:

    这是我已经使用了一段时间的 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
    

    这将产生具有以下名称的录音 录音_000.asf 录音_001.asf 等等 还有一个带有 mplayers 输出的日志文件(以备不时之需)。 我已将时间段硬编码为 2h,但您可以轻松更改它。

    【讨论】:

    • 我确实在网站上遇到过这个问题,但我正在寻找一个纯 PHP 解决方案来解决这个问题,因为我在服务器上运行的安全软件限制了 bash。此外,作为一个纯 PHP 解决方案,它可以用于更大的项目。无论如何谢谢:)
    【解决方案2】:

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

    【讨论】:

    • 谢谢,但澄清我想捕获音频流,而不是流式传输音频文件。我已经修改了问题以澄清这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多