$end || $end >= $fileSize) { header("HTTP/1.1 416 Requested Range Not Satisfiable"); exit; } $length = $end - $start + 1; header("HTTP/1.1 206 Partial Content"); header("Content-Range: bytes $start-$end/$fileSize"); } else { $start = 0; $end = $fileSize - 1; } // En-têtes HTTP pour le streaming header("Content-Type: " . $file["type"]); header("Content-Length: $length"); header("Accept-Ranges: bytes"); $fp = fopen($filePath, 'rb'); fseek($fp, $start); $bufferSize = 1024 * 8; $bytesSent = 0; // Lecture de la vidéo par morceaux while (!feof($fp) && ($bytesSent < $length)) { $buffer = fread($fp, $bufferSize); echo $buffer; flush(); // Vide le tampon de sortie $bytesSent += strlen($buffer); } fclose($fp); } }