У меня есть основанная на PHP структура потока, и если я пытаюсь прикрепить метаданные к буферу, поток начинает иметь потрескивающие шумы и весь поток начинает падать!
Мой код для внедрения метаданных:
$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"]);
}
Задача ещё не решена.
Других решений пока нет …