參考文章1:http://www.68design.net/Web-Guide/Flash/10228-1.html
參考文章2:http://blog.csdn.net/ak47zc123/article/details/5251616
假設外部的XML檔案和SWF在同一目錄裡,叫my_video.xml内容是:
<?xml version="1.0" encoding="utf-8" ?>
<video_info>
<video_name>視訊1</video_name>
<video_path>video/index1.flv</video_path>
</video_info>
則在flash第一幀寫:
var myXML:XML = new XML();
var XML_URL:String = "my_video.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
var vp:String = myXML.video_path;
trace(vp);//結果是:video/index1.flv
}
====================================================
如果XML裡有多個重複的資料,比如my_videolist.xml内容是:
<?xml version="1.0" encoding="utf-8"?>
<video_info>
<name addr="video/index1.flv">視訊1</name>
<name addr="video/index2.flv">視訊2</name>
<name addr="video/index3.flv">視訊3</name>
<name addr="video/index4.flv">視訊4</name>
<name addr="video/index5.flv">視訊5</name>
</video_info>
flash裡:
var myXML:XML = new XML();
var XML_URL:String = "my_videolist.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
var my_Array:Array = new Array();
var my_Array2:Array = new Array();
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
for (var i:Number = 0; i<myXML.name.length(); i++)
{
my_Array[i] = myXML.name[i];
my_Array2[i] = myXML.name[i]. @ addr;//name标簽的addr屬性值
trace(my_Array[i]+"的位址:"+my_Array2[i]);
}
}
輸出結果:
視訊1的位址:video/index1.flv
視訊2的位址:video/index2.flv
視訊3的位址:video/index3.flv
視訊4的位址:video/index4.flv
視訊5的位址:video/index5.flv
================================================
全部的視訊播放代碼如下:
//讀取XML檔案裡的視訊路徑
var myXML:XML = new XML();
var XML_URL:String = "my_video.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
//建立視訊
var video:Video = new Video();
addChild(video);
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = {};
ns.client.onMetaData = ns_onMetaData;
function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
var vp:String = myXML.video_path;//video_info.xml裡有個标簽叫<video_path>
ns.play(vp);
video.attachNetStream(ns);
}
//視訊資訊的擷取和設定
function ns_onMetaData(item:Object):void
{
trace(item.duration);//擷取總時長
trace(ns.time);
// Resize video instance.
video.width = item.width;
video.height = item.height;
// Center video instance on Stage.
video.x = (stage.stageWidth - video.width) / 2;
video.y = (stage.stageHeight - video.height) / 2;
//ns.seek(20);//從第20秒開始播放
}
//偵聽視訊流的開始和末尾
ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
function statusHandler(event: NetStatusEvent):void
{
trace(event.info.code);
if (event.info.code == "NetStream.Play.Stop")
{
goURL();
}
}
function goURL()
{
var my_req:URLRequest = new URLRequest("index_in2.aspx");
navigateToURL(my_req,"_self");
}
/*
//需要在FLV視訊裡添加CuePoint(提示點)才可以用
//提示點不一定需要重新編輯視訊,可以利用flvtool2等工具就可以寫入
ns.client.onCuePoint = ns_onCuePoint;
function ns_onCuePoint(item:Object):void {
trace("cuePoint");
trace(item.name + "\t" + item.time);
trace(ns.time);
}
*/