背景
大家一定碰到過(guò)這種問(wèn)題, 在本地測(cè)試播放成功的 flv 視頻在服務(wù)器上無(wú)法播放, 并且直接訪問(wèn) flv 文件被告知找不到文件, 這是因?yàn)?IIS 6 的默認(rèn)配置中并沒(méi)有 flv 后綴的 mime 映射, 所以會(huì)產(chǎn)生 404 找不到文件的錯(cuò)誤. 通常的做法是修改 IIS 配置, 添加 flv 的 mime 映射, 問(wèn)題是解決了, 但如果因?yàn)槟承l件限制無(wú)法修改配置怎么辦, 第一個(gè)想到的是修改成讓他可以被識(shí)別的后綴名, 可惜的是自帶的組件默認(rèn)情況下并不允許你那么做, 否則會(huì)報(bào)告錯(cuò)誤
player.contentPath = "water.swf"; // player 是舞臺(tái)中 FLVPlayer 組件實(shí)例名, 這里我把后綴名改成 swf, 以便可以讓 IIS 識(shí)別
引用: 報(bào)錯(cuò) 1005: Invalid xml: URL: "water.swf" No root node found; if file is an flv it must have .flv extension
解決: 使用自定義的 NCManager 替代默認(rèn)的 NCManager 判斷 flv 后綴的代碼在 NCManager 的 connectToURL 方法中, 我修改了他的實(shí)現(xiàn)從而跳過(guò)了這個(gè)步驟 NCManager.as 262 行處
原:
代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
現(xiàn):
代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
我修改代碼跳過(guò)了這個(gè)判斷, 這樣即使不是 flv 后綴同樣能夠播放, 當(dāng)然帶來(lái)的副作用就是無(wú)法使用 SMIL 了.
最后我把修改了的代碼另存成 HttpConnectionManager.as, 同時(shí)類(lèi)名也改成 HttpConnectionManager, 放到 fla 所在目錄中
代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
這樣場(chǎng)景中所有的 FLVPlayer 都使用 HttpConnectionManager 作為 NCManager 了. 不過(guò)等等, 這樣做是不夠的, 因?yàn)槲覀兊?HttpConnectionManager 還沒(méi)有被編譯進(jìn) SWF 中, 只要簡(jiǎn)單的加一句HttpConnectionManager 就可以了。
完整的代碼:
import mx.video.FLVPlayback; import mx.video.VideoPlayer; HttpConnectionManager; // 為了讓類(lèi)能夠被編譯進(jìn) swf VideoPlayer.prototype.ncMgrClassName = "HttpConnectionManager"; var player:FLVPlayback; player["_vp"][0]._video.smoothing = true; // 讓視頻能夠平滑播放的小 hack player.contentPath = "water.swf"; // water.flv 后綴名改成了 swf
到這里, 我們的播放器就完成了。
教程及源碼下載:Player.zip
經(jīng)典論壇交流: http://bbs.blueidea.com/thread-2726163-1-1.html
本文鏈接:http://m.95time.cn/tech/multimedia/2008/6246.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進(jìn)入論壇RIA設(shè)計(jì)與應(yīng)用版塊參加討論
|