Как справиться с очередями кодирования видео при нескольких загрузках видео? - PullRequest
5 голосов
/ 18 июня 2011

Я работаю над созданием сайта потокового видео, где пользователи могут загружать видео на сайт (несколько видео одновременно, используя плагин uploadify jquery).

Теперь я столкнулся с вопросом о кодировании видеона FLV для потоковой передачи их в Интернете.

Когда должен происходить процесс кодирования видео?Должно ли это произойти сразу после завершения загрузки (т. Е. Перенаправить пользователя на страницу успешной загрузки, а затем начать кодирование в фоновом режиме, используя команду exec для ffmpeg?) Однако, используя этот подход, как определить, успешно ли завершилось кодирование?Что если пользователи загрузят испорченное видео, а ffmpeg не сможет его закодировать?Как мне справиться с этим в PHP?

Как поставить в очередь кодирование видео, поскольку несколько пользователей могут загружать видео одновременно?Есть ли у FFMpeg собственная очередь кодирования?

Я также читал об устройствах управления и очередях сообщений, таких как redis и AMQP, в другом связанном потоке SO.Это одно из потенциальных решений?

Я был бы очень признателен, если бы кто-то мог дать ответы на мои вопросы.

Ответы [ 4 ]

2 голосов
/ 18 июня 2011

Вы можете использовать задание cron на сервере или использовать что-то вроде beanstalkd (или gearman, как упомянуто в других ответах на этот вопрос).

2 голосов
/ 18 июня 2011

Поскольку кодирование может занять некоторое время, вы можете добавить входные файлы в папку и добавить запись в базу данных. Затем у вас есть скрипт, который запускается либо постоянно, либо каждые x минут, чтобы преобразовать ожидающие видео из базы данных в формат FLV.

Чтобы поставить их в очередь, вам нужно будет создать собственный скрипт, который будет повторно запускать FFMpeg для каждого файла.

2 голосов
/ 18 июня 2011

Вы должны использовать программное обеспечение под названием gearman . Это рабочий сервер, и вы можете вызывать функции с помощью PHP. Вы можете перенести процесс в фоновый режим, и он автоматически обрабатывает очереди. Многие процессы могут выполняться параллельно.

Я использовал его, и его очень легко установить и использовать.

Для вашего случая использования,

Wrap the ffmpeg process in a php file with exec.
Save the uploaded file to db and give it an id. 
Call the encode function after a user uploads file.
As soon as the encode function starts, 
update the db to reflect that the file was "picked".
First run the ffmpeg info on the file to see if it is fine.
Then encode the file and after it is done, update db flag to "done".

После завершения процесса вы можете вызвать другую функцию, чтобы отправить пользователю электронное письмо, твит и т. Д. О завершении кодирования.

1 голос
/ 18 июня 2011

FFMpeg - это просто утилита командной строки.У него нет очереди, и вам нужно будет создать собственную систему очередей для асинхронного выполнения этой работы.

Для очередей PHP у меня был хороший опыт работы с сервером beanstalkd с использованием PHP-клиента pheanstalk.Затем ваш скрипт загрузки должен вставить элементы в очередь для кодирования и вернуть пользователю ответ, что видео будет обработано в ближайшее время.Ваши работники должны получить элементы из очереди и запустить FFMpeg на них.Вы можете прочитать код состояния FFMpeg, чтобы определить, было ли кодирование успешно завершено.

...