這兩天完善了一下視頻轉(zhuǎn)換這個(gè)東西,以前做的那套東西上傳完之后就開始轉(zhuǎn)換,無法適應(yīng)大并發(fā)量下的視頻轉(zhuǎn)換(我覺得同時(shí)有10個(gè)ffmpeg進(jìn)程在轉(zhuǎn)視頻服務(wù)器肯定要掛掉),所以我用了另一套方案,視頻上傳之后先不轉(zhuǎn)換,把視頻的基本信息存到數(shù)據(jù)庫中,然后由程序定時(shí)的從數(shù)據(jù)庫中讀取數(shù)據(jù),依次轉(zhuǎn)換視頻。具體做法是:1、上傳文件,將文件名存入數(shù)據(jù)庫,同時(shí)在數(shù)據(jù)庫標(biāo)明videostat字段為0(表示未轉(zhuǎn)換)
2、通過程序,每隔30秒(根據(jù)不同情況可以改變)取出一個(gè)未轉(zhuǎn)換(videostat=0)且失敗次數(shù)小于5(confailtime<5)的紀(jì)錄
3、開始轉(zhuǎn)換視頻,這里要先將數(shù)據(jù)庫中videostat字段改為2(表示正在轉(zhuǎn)換)不然30秒鐘轉(zhuǎn)換不完下個(gè)進(jìn)程又會(huì)讀到這條紀(jì)錄開始轉(zhuǎn)換......
4、等待轉(zhuǎn)換進(jìn)程結(jié)束,如果成功將相應(yīng)紀(jì)錄的videostat字段的值改為1(表示轉(zhuǎn)換成功),若轉(zhuǎn)換失敗則將失敗次數(shù)字段加一(confailtime=confailtime+1)
在鼓搗這東西的過程中,遇到了一個(gè)問題,如果一個(gè)進(jìn)程先執(zhí)行p.waitFor();方法而后輸出命令行中的結(jié)果是不行的,即:

如果這樣執(zhí)行的話進(jìn)程會(huì)掛起,無法繼續(xù)下午,而正確的方法是先讀取命令行的數(shù)據(jù),再來waitFor();
還有一點(diǎn)需要注意的是獲得命令行的輸出結(jié)果先要從錯(cuò)誤流中獲得,即(ErrorStream),而非從輸入流(InputStream)中獲得,很有用的經(jīng)驗(yàn)。
--------------------------
09博客園紀(jì)念T恤
新聞:自由軟件基金會(huì)列舉Windows 7之七宗罪
網(wǎng)站導(dǎo)航: 博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看
文章來源:http://www.cnblogs.com/xiaoao808/archive/2009/08/04/1538824.html