2011-04-08 81 views
2

我對ffmpeg和beanstalk很新,我需要一點幫助。我想使用beanstalk排隊文件以供ffmpeg轉換。我已經下載,安裝並啓動了beanstalkd(它也暗示安裝了libevent),並且我已經下載了一個用於beanstalkd的PHP客戶端;使用ffmpeg,PHP和beanstalk

http://sourceforge.net/projects/beanstalk/

現在下載客戶端後,並把它在我的服務器上,我什麼也沒做,但是從客戶端使用的例子,我得到這個錯誤;

致命錯誤:在/Users/wasimkhamlichi/Sites/vibenation/beanstalk/src/BeanStalk.class.php超過上線1138

這是從例子中的代碼30秒最大執行時間;

$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. 

非常簡單的快速腳本只是說問候,但它是超時。任何人都可以幫忙嗎?

+0

您正在使用哪個客戶端庫? – halfdan 2011-04-08 08:31:54

+0

嗨,這是由iceyliquid php beanstalkd客戶端 - 在這裏找到它 - http://sourceforge.net/projects/beanstalk/ – Wasim 2011-04-08 08:41:40

+0

你能確保這項工作真的放入隊列嗎?使用可以使用'set_time_limit(0)'來防止腳本超時。確保beanstalkd確實在該端口上運行。 – halfdan 2011-04-08 10:29:19

回答

2

Beanstalk只是傳遞消息。你在某個地方把某些東西放入隊列中,然後在別的地方把它拿出來。

你可以把一個文件名放入名爲'ffmpeg-convert'的管中。從命令行運行的PHP腳本會保留隊列中的下一個項目,並執行所需的操作,將完成的文件放在適當的位置。

如果需要更多的信息(例如,其中把完成的文件,質量設置或一個新的輸出文件名),則可以將信息編碼 - 的轉換成JSON字符串(與json_encode($array))信息的陣列是一個好的選擇。您將編碼的字符串放入Beanstalk中,並且cli腳本解碼字符串,並完成工作。

將worker作爲基於命令行的腳本運行通常可以避免任何超時問題。與網頁請求不同,沒有默認超時,內存使用方面也有更多的自由度。

+1

非常感謝Alister。那麼在數據庫的隊列中使用Beanstalkd有什麼好處? – Wasim 2011-04-13 10:47:53

+2

一個好處是你將不得不繼續輪詢數據庫,一個beanstalk客戶端可以連接,然後它會等待,直到有一條消息。在我做的演示中還有其他優點(和殺手功能),請訪問http://abulman.co.uk/presentations/Beanstalkd-2010-05-06/ – 2011-04-13 18:56:59

+0

奇妙而精彩的演示。謝謝你的幫助! – Wasim 2011-04-13 22:10:51