2009年6月19日 星期五

每日最新CNN影片輪播 & jw flv player error #2032的問題



每日最新CNN影片輪播(全螢幕) http://5566.appspot.com/cnn

這兩天幫某系做第二外語的廣播系統 打算在系館的中庭播放cnn之類外國新聞的影片
我本來選的是cnn的video來做影片來源 http://www.cnn.com/video/
不過有幾個缺點第一是播放器很不穩 而且load的速度很慢
另外不知名的原因如果在c#裡用webbrowser播放時有一定的機率出現general error不能播
最後就是預設的播放影片只有4~5個 播完不能repeat 要自己重新手動播放才可以


所以我就自己重新做了一個網頁去parser cnn video
改用另外的播放器 JW FLV PLAYER
這樣一開始就會把cnn所開放的所有影片加入清單 大概有40~50段的影片
播一輪可以播2小時以上 而且播完會自己重播
但是在做的時候碰到一個很奇怪的問題
我直接餵JW PLAYER吃靜態xml檔案的playlist很正常
可是如果餵他吃我動態產生的xml playlist 的話 JW player就會出現error #2032
( 我自己產生的cnn即時影片playlist
http://5566.appspot.com/cnn_atom_by_section_world.xml )


用firebug分析了一下 發現問題出在一個很奇怪的地方
比較了靜態檔案和動態產生的檔案
我發現靜態檔案的回應標頭有一樣是Cache-Control = public, max-age=600
而app engine上動態檔案的回應標頭是Cache-Control = nocache
所以解決方法就是在程式碼裡加上 self.response.headers['Cache-Control'] = "public, max-age=600"
就好了 真的是很奇怪的問題 而且不加的話 firefox看沒事 ie看也一定機率沒事
但是用c#內嵌webbrowser看jw flv playe就100%一定會跳error #2032出來
到現在還不知道為什麼會這樣~ :(

最後推薦一下JW player 免費又好用的播放器!! 可以播flv wmv mp3等很多種格式~~