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]撰寫,引用分享請以鏈結形式註明出處與原始作者。


請問一下 如何讓對方的視訊檔存在我的SEVER裡啊?
我有3個連線小遊戲想請人幫我做….不知你或你的朋友能幫我處裡嗎…
許先生 0961302555
a8833.a8833@msa.hinet.net
請問一下~~~
我照寫了你的code…執行的時候他會出錯
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Test/statusHandler()
swf上也沒有播影片…
我是把package{} 裏的東西save成了class,再在fla裏new這個class
會不會是streamVideo這個東西我沒宣告呢?
謝謝解答~
Dear XYZ:
串流模式是不用這兩個屬性的,在Flash的中文翻譯中的確是寫"串流",但是我認為那是翻譯上的筆誤,若是要認真去探討,我倒是建議那個翻譯是用"漸進式"會比較恰當。
请教一下,我按照作者您的方式,对程序稍微的做了修改,结果视频文件播放不出来了,其中的cs3文件我已经放置在作者说的路径下,请作者帮我看一下是什么问题,代码如下
package {
import flash.display.Sprite;
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.Event;
import flash.net.ObjectEncoding;
public class Main142 extends Sprite {
private var videoURL:String = "cs3.flv";
private var connection:NetConnection;
private var stream:NetStream;
public function Main142() {
connection = new NetConnection();
connection.objectEncoding = ObjectEncoding.AMF0;
connection.connect("rtmp://192.168.1.7/firstMedia/streams/connector");
connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}
private function netStatusHandler(event:NetStatusEvent):void {
switch (event.info.code) {
case "NetConnection.Connect.Success":
connectStream();
break;
case "NetStream.Play.StreamNotFound":
trace("Stream not found: " + videoURL);
break;
}
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function connectStream():void {
var stream:NetStream = new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.client = new CustomClient();
var video:Video = new Video();
video.attachNetStream(stream);
stream.play("cs3.flv");
addChild(video);
}
}
}
class CustomClient {
public function onMetaData(info:Object):void {
trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
}
public function onCuePoint(info:Object):void {
trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type);
}
}