2009-10-01

OsTube_ver.2_5---取FLV的時間值還是騙很大(誤)

不知道這個問題在2.6版有無解決…

至少,我還是在用2.5…

之前在2.3時,我寫了一則「osTube2.3–取得上傳flv檔的時間長度」的文章,是利用一些既有的方式在upload檔案時,可以取得所上傳的flv檔的時間長度,然後補進osTube的db中…以補足一些缺點…

但後來聽說2.5版的這個flv檔的時間長度問題已被解決,我就想說既然官方都已解決,我就不用那麼麻煩,所以更新2.5時我也沒那麼注意這一點。

但近期我發現,有一些flv上傳時,在2.5版的確可以取得時間長度(media_duration)…但怪異的是,不是每一個所上傳的flv檔都可以取得這個duration…


怪了,我之前自己寫的function就沒這個問題…

所以,在聽到2.6版是針對webTV的更新,我就沒打算再upgrade…繼續用2.5…然後,還是替官方補足…所以我就照我之前寫的文章來把GetFLVDuration這個function補回…

但,發現一個問題…我發現我在2.5用我寫2.3時的方式,竟然還是沒有辦法取得flv-duration…怎麼可能…我當初寫的可是大眾化

所以,我開啟db與上傳來做比對…又發現了問題

上傳一結束,ostube會先把新媒體的資訊寫一份到db,所以,剛上傳完,我進到db中的os_media資料表中,可以看到新上傳的那一個媒體的duration有寫入用GetFLVDuration取得的值,但大約過一、二秒,就發現media_duration這一欄歸零了…

不死心的我,繼續詳查…

依ostube的方式,upload之後就是判斷要不要convert…所以,如果upload這個沒有問題,那問題點就是convert…

果不其然,我發現跟之前版本不同的地方…

原來,ostube官方在寫取得flv-duration的方式很奇怪,他是在convert時再來抓值…這樣的方式會遇到一個很大的問題…就是如果電腦正在儲存中或是慢了一點,這個duration會取不到,然後就會補零上去…

事實上,這樣的判斷也不能說錯…只是判斷的點放錯了…

因為,你在上傳時就會放在temp區,這個時候就可以點來取duration了,何必花時間來找儲存位置上的flv來取duration…

所以,就是convert這裡搞的鬼…

----

開啟convert.php,尋找內容有「media_duration」的地方…會有二處,都是用$dbconn開頭的…
最直接的方式就是把media_duration拿掉…這樣一來,我寫的GetFLVDuration就完美了…

本以為官方寫的會很不錯,結果,還是我自己寫的比較好…
----

edit by 2009-10-02 11:23 am

我後來發現其他的問題…基本上,官方的方式也沒錯…所以我改寫,請看「OsTube-ver_2.5—flv取時間值的問題(編前篇–解誤)

沒有留言: