создай сайт для стриминга
напиши код на php
Информатика Университет Веб-разработка онлайн-курсы по информатике дипломная работа по информатике информационные технологии в вузах исследовательские проекты по информатике Новый
Общая идея решения: Мы создадим два файла для простейшего сайта стриминга видео:
Файл index.php – главная страница, которая выводит HTML-разметку с элементом video. Элемент video указывает, что источник видео берётся из файла stream.php с передачей параметра (например, sample.mp4).
Файл stream.php – выполняет «стриминг» видеофайла. Этот скрипт получает имя видео через параметр GET, проверяет наличие файла, обрабатывает заголовок HTTP_RANGE (для поддержки перемотки/seek) и передаёт данные пользователю частями.
Важно: Приведённый пример демонстрирует базовый механизм стриминга видео через PHP. Для реального использования необходимо учитывать вопросы безопасности, проверять допустимые расширения файлов, настраивать сервер и оптимизировать работу с большими файлами.
Код файла index.php:
<?php
// index.php – главная страница стриминг-сайта
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Сайт для стриминга</title>
</head>
<body>
<h1>Добро пожаловать на сайт для стриминга</h1>
<video width="640" height="360" controls>
<source src="stream.php?video=sample.mp4" type="video/mp4">
Ваш браузер не поддерживает видео.
</video>
</body>
</html>
Код файла stream.php:
<?php
// Получаем имя видео из GET-параметра и формируем путь
$video = $_GET['video'];
$path = 'videos/' . basename($video);
if (!file_exists($path)) {
header("HTTP/1.1 404 Not Found");
exit;
}
$size = filesize($path); // Определяем размер файла
$length = $size; // Длина контента, по умолчанию равна размеру файла
$start = 0; // Начало отправки
$end = $size - 1; // Конец отправки
 // Обработка заголовка HTTP_RANGE для поддержки перемотки
 if (isset($_SERVER['HTTP_RANGE'])) {
$range = $_SERVER['HTTP_RANGE'];
// Пример значения: bytes=0-1023
list(, $range) = explode('=', $range, 2);
if (strpos($range, ',') !== false) {
header('HTTP/1.1 416 Requested Range Not Satisfiable');
exit;
}
if ($range == '-') {
$start = $size - substr($range, 1);
} else {
$range = explode('-', $range);
$start = $range[0];
$end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size - 1;
}
$length = $end - $start + 1;
header('HTTP/1.1 206 Partial Content');
header("Content-Range: bytes $start-$end/$size");
 } else {
header("HTTP/1.1 200 OK");
 }
 header("Content-Type: video/mp4");
 header("Content-Length: " . $length);
 $fp = fopen($path, 'rb');
 fseek($fp, $start);
 $buffer = 1024 * 8; // Размер чанка – 8KB
 while(!feof($fp) && (ftell($fp) <= $end)) {
if (ftell($fp) + $buffer > $end) {
$buffer = $end - ftell($fp) + 1;
}
set_time_limit(0);
echo fread($fp, $buffer);
flush();
 }
 fclose($fp);
 exit;
?>
Пошаговое объяснение кода stream.php:
Сначала получаем переданный параметр video и формируем путь к файлу, при этом используем функцию basename для безопасности (чтобы избежать доступа к файлам за пределами заданной директории).
Если файл не найден, отправляем заголовок 404 и завершаем выполнение.
Определяем размер файла и задаём начальное (start) и конечное (end) значения для чтения файла.
Проверяем наличие HTTP-заголовка Range. Если клиент запрашивает только часть файла (например, при перемотке), вычисляем корректные значения start и end, отправляем заголовок 206 Partial Content и указываем диапазон передаваемых байт.
Устанавливаем заголовки Content-Type (тип контента – video/mp4) и Content-Length (количество передаваемых байт).
Открываем файл и перемещаем указатель на позицию start. Затем в цикле читаем файл порциями (чанками) до достижения конца запрошенной части файла, выводим эти данные и отсылаем их клиенту.
После завершения чтения закрываем файл и завершаем выполнение скрипта.
Замечания: Этот пример является базовым и может быть расширен: можно добавить авторизацию пользователей, механизм выбора видео, обработку ошибок и улучшение безопасности (например, проверку входных данных). Кроме того, для больших видеофайлов стоит рассмотреть использование специализированных серверов или CDN для работы с видео.