Как конвертировать видео в фоновом режиме с помощью PHP и ffmpeg

Я разрешаю пользователям загружать видео, а затем они преобразуются с помощью ffmpeg. Видео занимает очень много времени, чтобы преобразовать, что обычно приводит к ошибке. Я сделал свое исследование без везения, где я должен начать.

В основном, я хочу, чтобы пользователь мог загрузить видео, а затем отобразить сообщение, в котором говорится, что видео обрабатывается, и вы будете уведомлены, когда это будет доступно. Тем временем я хочу, чтобы видео было конвертировано за кулисами и позволило пользователю покинуть страницу или закрыть браузер. Я использую сервер Windows.

Как я могу это сделать?

Ниже приведено краткое описание того, как создать собственную очередь с помощью системы планирования, такой как Cron:

  • Создайте queue таблиц базы данных, содержащую (id, created_at, file_path, id_user, result, error) . Путь file_path содержит местоположение загруженного видео для обработки, результат равен null перед обработкой, а затем true/false после этого в зависимости от успеха, и если он сбойной error содержит какие-либо сообщения. При необходимости первичный ключ таблицы пользователя можно сохранить здесь.
  • Каждую минуту запускайте программу Cron для проверки очереди для любых необработанных элементов.
  • Если есть элементы ожидания, прокрутите несколько из них и запустите код преобразования видео. Вы можете ограничить это так, чтобы не более, чем, скажем, пять элементов обрабатывались за один раз, и все более поставленные в очередь элементы должны ждать нового запуска cron.
  • В начале вашего cron-скрипта вам нужно выйти раньше, если старая копия уже запущена. Вы можете использовать вывод ps aux | grep (scriptname) ps aux | grep (scriptname) чтобы помочь здесь, если вы работаете в * nix-подобной операционной системе.

Внутри вашего веб-приложения вам нужно несколько изменить рабочий процесс – вместо того, чтобы ожидать немедленного обработки видео, вам необходимо:

  • Запросить преобразование видео, создав новую строку базы данных
  • Перенаправляется на страницу, которая объясняет, что происходит создание видео
  • Периодически проверяйте статус конверсии с помощью веб-переадресации, AJAX или веб-сокетов.

Этот подход очень полезен для общего хостинга, где вы не можете установить свои собственные процессоры очереди. Однако, если вы находитесь в VPS или облачной системе, вы можете захотеть изучить Gearman или одну из многих других систем очередей . Они немного сложнее, чем выше, но имеют больше возможностей для управления очередями работы.