07.24
[這段程式碼僅供ActionScript 3.0與Flash Media Server參考]
上次完成了連線,光完成連線應該沒什麼快感吧,這次要嘗試從Flash Media Server上來動態串流播放FLV檔,當然因為要播放的是一個串流的媒體,所以要先準備好一個.flv的影片檔才能播放。
基本上串流是經由NetConnection的連線在傳遞資料,一個NetConnection 可以有多個NetStream,不過一個NetStream只能處理一個媒體,而且只能處理一個方向,這時候你一定覺得什麼叫做方向,老實說我也覺得怪怪的,不過這邊講的方向是指錄製(由Client送往Server)或是播放(由Server送往Client),所以若要要同時錄製與播放,則可以產生兩個NetStream即可,說太遠了,這邊我們示範播放串流就好了,這個CS3.flv被放置在[C:Program FilesMacromediaFlash Media Server 2applicationsfirstMediastreamsconnector]目錄中,firstMedia是應用程式名稱(Apllication Name)而connector是實題名稱(Instance name),示範程式如下:
執行結果如下圖,就可以播放Server上的FLV。
package {
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.net.ObjectEncoding;
import flash.media.Video;
import flash.net.NetStream;
import flash.events.AsyncErrorEvent;
public class Main142 extends Sprite{
public var nc:NetConnection;
public var in_ns:NetStream;
public function Main142(){
nc = new NetConnection();
nc.objectEncoding = ObjectEncoding.AMF0;
nc.connect("rtmp://127.0.0.1/firstMedia/connector");
nc.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
}
private function statusHandler(event:NetStatusEvent):void{
if(event.info.code == "NetConnection.Connect.Success"){
in_ns = new NetStream(nc);
in_ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,errorHandler);
in_ns.addEventListener(NetStatusEvent.NET_STATUS,videoHandler);
streamVideo.attachNetStream(in_ns);
in_ns.play("cs3″)
trace("ok")
}
}
private function errorHandler(event:AsyncErrorEvent):void{
}
private function videoHandler(event:NetStatusEvent):void{
trace(event.info.code);
}
}
}

相關文章:
文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。


請教一下,當我讀入串流時,為什麼串流的byteloaded、bytetotal讀取不到資料?
等到有時間我會在繼續講 Flash Media Server的內容,當然也包含SSAS。
不好意思,剛學習,不太懂您的意思,可以給我點提示嗎?!
請問會試範SSAS語言嗎?
Dear XYZ:
當然可以偵測頻寬,請搭配Server-Side ActionScript一起使用。
Dear XYZ:
因為在Flex的底層至少要用UIComponenet,請自行用Flex製做出畫面再參考這篇的示範。
不好意思,再請問一下,我在看一些串流影片時,有些影片大小一樣,從不同地方下載,但串流速度卻不一樣,是因為AS3裡有方法可以看我有多少頻寬,以決定給多少量嗎?所以頻寬比較慢,就給少一點量!?謝謝
不好意思,我找到為什麼沒有畫面,我忘了開fms,所以沒畫面,但是開啟fms後,
出現如下訊息:
TypeError: Error #1034: 強制轉型失敗: 無法將 flash.media::Video@3697871 轉換成 mx.core.IUIComponent。
at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()
at mx.core::Container/addChildAt()
at mx.core::Container/addChild()
at connector/::statusHandler()
可以解釋一下嗎?!謝謝
不好意思,沒貼到程式碼
/*
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.net.ObjectEncoding;
import flash.media.Video;
import flash.net.NetStream;
import flash.events.AsyncErrorEvent;
import flash.media.Video;
import flash.net.*;
public var nc:NetConnection;
public var in_ns:NetStream;
public function Main142():void{
ll.text="ok";
nc = new NetConnection();
nc.objectEncoding = ObjectEncoding.AMF0;
nc.connect("rtmp://localhost/firstMedia/connector");
nc.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
}
private function statusHandler(event:NetStatusEvent):void{
if(event.info.code == "NetConnection.Connect.Success"){
in_ns = new NetStream(nc);
in_ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,errorHandler);
in_ns.addEventListener(NetStatusEvent.NET_STATUS,videoHandler);
var streamVideo:Video=new Video(360,240);
streamVideo.attachNetStream(in_ns);
in_ns.play("cs3″)
trace("ok")
vbox.addChild(streamVideo);
}
}
private function errorHandler(event:AsyncErrorEvent):void{
}
private function videoHandler(event:NetStatusEvent):void{
trace(event.info.code);
}
*/
Dear XYZ:
這段Code不是Flex的程式,而是純ActionScript 3.0,若想要用在Flex中要配合MXML才行,不過關鍵的code都在這了。
新手請多指教,為什麼我測試,打了上面的程式碼,打在Flex2裡
程式碼如下
為什麼執行後點了按鈕後沒有畫面,謝謝