天天看點

【AS3】Flash讀取XML内容的方法(附加載一個視訊的例子)

參考文章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);
}
*/