#php #ffmpeg #beanstalkd
#php #ffmpeg #beanstalkd
Вопрос:
Я очень новичок в ffmpeg и beanstalk, и мне нужна небольшая помощь. Я хочу использовать beanstalk для постановки файлов в очередь для преобразования в ffmpeg. Я скачал, установил и запустил beanstalkd (также установил libevent, как это предлагается), и я загрузил PHP-клиент для beanstalkd;
http://sourceforge.net/projects/beanstalk/
Теперь, после загрузки клиента и установки его на мой сервер, я ничего не сделал, кроме как использовал пример из клиента, и я получаю эту ошибку;
Неустранимая ошибка: превышено максимальное время выполнения в 30 секунд в /Users/wasimkhamlichi/Sites/vibenation/beanstalk/src/BeanStalk.class.php в строке 1138
Это код из примера;
$beanstalk = BeanStalk::open(array(
'servers' => array( '127.0.0.1:11300' ),
'select' => 'random peek'
));
// As in the protocol doc.
$beanstalk->use_tube('foo');
// As in the protocol doc.
$beanstalk->put(0, 0, 120, 'say hello world'); // Add a job to the queue with highest priority,
// no delay, 120 seconds TTR, with the contents
// 'say hello world'.
// NOTE: the put() method here supports a final optional
// argument, a tube name. If supplied, the server will
// first switch to that tube, write the job, then switch
// back to the old tube again.
// As in the protocol doc.
$job = $beanstalk->reserve(); // Assuming there was nothing in the queue before
// we started, this will give us our 'hello world'
// job back.
// This is a BeanQueueJob object.
echo $job->get(); // Output: 'say hello world'
Beanstalk::delete($job); // Delete the job.
Очень простой быстрый скрипт, просто чтобы поздороваться, но время ожидания истекло. Кто-нибудь может помочь, пожалуйста?
Комментарии:
1. Какую клиентскую библиотеку вы используете?
2. Привет, это php-клиент beanstalkd от iceyliquid — найдите его здесь — sourceforge.net/projects/beanstalk
3. Можете ли вы убедиться, что задание действительно помещено в очередь? Использование может использоваться
set_time_limit(0)
для предотвращения тайм-аута скрипта. Убедитесь, что beanstalkd действительно запущен на этом порту.4. Задание определенно находится в очереди, и сервер определенно находится на этом порту. Я изменил set_limit_limit(0), но страница просто зависает навсегда. Я подключился по telnet к localhost 11300 и ввел статистику, и это появилось ——— OK 813 — текущие задания-срочные: 1 текущие задания-готовые: 1 текущие задания-зарезервированные: 0 текущие задания-отложенные: 0 текущие задания-похороненные: 0 ——- Есть идеи?
5. Хорошо, теперь я использую php-библиотеку pheanstalk beanstalkd, которая, кажется, загружается нормально. Я действительно не уверен, как это работает. Я хочу обработать ffmpeg из командной строки, но когда я передаю beanstalkd команду the, на самом деле ничего не происходит, ffmpeg ничего не обрабатывает. Когда я использую $pheanstalk->put(«сообщение»); — что я могу фактически передать в качестве сообщения? Спасибо
Ответ №1:
Beanstalk просто передает сообщения по кругу. Вы помещаете что-то в очередь в одном месте, а позже извлекаете это где-то еще.
Вы могли бы поместить имя файла в файл под названием ‘ffmpeg-convert’. PHP-скрипт, запускаемый из командной строки, резервирует следующий элемент из очереди и делает то, что ему нужно, помещая готовый файл в соответствующее место.
Если вам нужна дополнительная информация (например, куда поместить готовый файл, настройки качества или новое выходное имя файла), вы можете закодировать информацию — массив информации, преобразованный в строку Json (с json_encode($array)
), является хорошим выбором. Вы помещаете закодированную строку в Beanstalk, а cli-скрипт декодирует строку и выполняет всю работу.
Запуск worker в виде скрипта на основе командной строки обычно позволяет избежать любых проблем с таймаутом. В отличие от запроса веб-страницы, здесь нет таймаута по умолчанию, а также больше свободы в использовании памяти.
Комментарии:
1. Большое спасибо, Алистер. Итак, в чем преимущества использования Beanstalkd по сравнению с очередью в базе данных?
2. Одним из преимуществ является то, что вам придется продолжать опрашивать базу данных, к которой может подключиться клиент beanstalk, а затем он будет ждать, пока для него не появится сообщение. В презентации, которую я сделал на , есть и другие преимущества (и убийственные функции)abulman.co.uk/presentations/Beanstalkd-2010-05-06
3. Фантастическая, блестящая презентация. Спасибо за вашу помощь!