Я пытаюсь настроить php api, который может передавать потоковое видео с расширением .mp4 из хранилища BLOB-объектов Azure.
Чего я хочу добиться, так это чтобы не все видео было загружено до его запуска.
Я использую Slim Framework 3 для моего Rest-API.
Я уже реализовал «нормальное» воспроизведение видео, но до того, как видео действительно начнет воспроизводиться, потребуется очень много времени.
Я использую хранилище Azure для PHP Sdk для доступа к хранилищу BLOB-объектов, затем получаю BLOB-объект и использую «fpassthru» для записи видео в ответ http.
Дополнительно я установил заголовок «content-type» и «content-length».
$blob = $this->blobClient->getBlob($this->ContainerName, $filename);
fpassthru($blob->getContentStream());
$response = $response->withHeader('Content-type', 'video/mp4');
Прямо сейчас, пока не начнется воспроизведение видео (около 30 МБ), потребуется очень много времени, потому что все данные должны быть загружены до его начала.
Я хотел бы знать, возможно ли включить своего рода «чанкованное» воспроизведение, которое начинается, когда часть видеоданных уже поступила.
Я думаю, что наилучшим способом будет потоковое видео, используя HLS(RFC 8216) реализация.
Это будет не просто, так как вам нужно:
Предоставить конечную точку для получения индексных файлов
Разбейте ваш файл mp4 на более мелкие куски, которые можно скачать отдельно HLS поддержка игроков (я думаю, что большинство из них делают в эти дни)
Может потребоваться внутреннее управление чанками, так как ломать mp4 каждый раз, когда пользователь запрашивает видео (или его часть), очень неэффективно.
Кроме того, вы можете посмотреть на что-то вроде HLS-видео-generater , или любую другую альтернативу, которую вы можете найти.
Обновить
Если вы уже используете лазурь, Я бы посоветовал вам взглянуть на Медиа Услуги, это должно дать вам то, что вы хотите, без особых усилий.
Надеюсь, поможет!
Других решений пока нет …