hi,
header('Content-type: audio/mpeg');
dieser header reicht vollkommen. Danach eine Leerzeile und dann den Stream.
header('Content-length: ' . getFileSize($_GET['url']));
Content-length ist ein header, der in einen POST-Request gehört. Nicht jedoch in eine Response.
Bei 2 und 2b spielt der Player die erste Sekunde oder so ab und "denkt" dann die Datei sei zuende. Wahrscheinlich weil PHP nicht schnell genug nachschiebt oder so.
Mach mal einen TCPDump (PCAP) dann siehst Du was geht.
Hotti