dqch34769 2017-04-30 06:21
浏览 34

PHP mp3流元数据

I have a PHP based stream framework and if I try to attach metadata to the buffer the stream starts to have crackling Noises and the whole stream starts to crash!

My code for the metadata injection:

$o = $i;
$old_buffer = substr(file_get_contents($settings["music_directory"].$playfiles[$i]["filename"]), $playfiles[$i]["audiostart"] + $track_pos, $playfiles[$i]["audiolength"] - $track_pos);
while(time() - $start_time < $settings["max_listen_time"]) {
    $i = ++$i % count($playfiles);
    $buffer = $old_buffer.substr(file_get_contents($settings["music_directory"].$playfiles[$i]["filename"]), $playfiles[$i]["audiostart"], $playfiles[$i]["audiolength"]);

    for($j = 0; $j < floor(strlen($buffer) / $settings["buffer_size"]); $j++) {
        if($icy_data) {
            if($i == $o + 1 && ($j * $settings["buffer_size"]) <= strlen($old_buffer))
                $payload = "StreamTitle='{$playfiles[$o]["artist"]} - {$playfiles[$o]["title"]}';".chr(0);
            else
                $payload = "StreamTitle='{$playfiles[$i]["artist"]} - {$playfiles[$i]["title"]}';".chr(0);

            $metadata = chr(ceil(strlen($payload) / 16)).$payload.str_repeat(chr(0), 16 - (strlen($payload) % 16));
        }


        if(empty($metadata))
            $metadata = "";

        echo substr($buffer, $j * $settings["buffer_size"], $settings["buffer_size"]).$metadata;
    }
    $o = $i;
    $old_buffer = substr($buffer, $j * $settings["buffer_size"]);
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
    • ¥15 unity连接Sqlserver
    • ¥15 图中这种约束条件lingo该怎么表示出来
    • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
    • ¥15 流式socket文件传输答疑
    • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
    • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
    • ¥15 win10,这种情况怎么办
    • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
    • ¥100 在连接内网VPN时,如何同时保持互联网连接