無論是廣播端(發出訊號)或是接收端(收到訊號)都需要先和 Red5 建立連線,皆需要 NetConnection 類別,再來就是需要串流 NetStream 類別。因此第一步就是建立連線…
var connection:NetConnection; connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, onConnected); connection.connect("rtmp://red5srv/oflaDemo");因為連線需要時間,因此需要偵聽 NetStatusEvent 事件等連線成功再進行下一步驟。
在這個例子中,我的主機名稱是「red5srv」,連到「oflaDemo」服務,這是 Red5 提供的範例服務。
再來就是定義處理事件用的函數…下面的例子是接收端的程式
private function onConnected(event:NetStatusEvent):void { if (event.info.code == "NetConnection.Connect.Success") { var stream:NetStream = new NetStream(connection); stream.bufferTime = 0; // 直播影像,bufferTime可以改成零 stream.play("red5StreamDemo"); var video:Video = new Video(640, 480); video.attachNetStream(stream); addChild(video); } }事件的傳回值可以由「info.code」取得,詳細的說明就要再查文件了,這裡只處理連線成功的狀況。
接著指定要播放的串流名稱叫「red5StreamDemo」,這是「oflaDemo」所用的名稱,可以讓我在還沒寫出訊號送出前,可以用範例程式輸出的影像作串接。
再來則是建立 Video 物件,只要指定好大小,將串流(NetStrem)放入,加到畫面上就可以看到了!
至於播放端的部分則有一點複雜一些些,就一些而已…把 if 裡的內容改成下面的樣子
var camera:Camera = Camera.getCamera(); camera.setQuality(0, 100); // 儘可能使用頻寬, 不作影響壓縮 camera.setMode(camera.width, camera.width, 15); // 以鏡頭的影響為主,每秒 15 格 var microphone:Microphone = Microphone.getMicrophone(); var stream:NetStream = new NetStream(connection); stream.attachCamera(camera); // 加入影像 stream.attachAudio(microphone); // 加入聲音 stream.publish("red5StreamDemo", "live"); // 廣播!首先重點當然是抓到「Camera」,這裡不單單指 WebCam,也可能是其它電腦抓得到訊號來源,以我測試的那台電腦,也可以抓到由 1394 線輸入的訊號。
抓到訊號來源,接著是設定抓取影像的大小和品質,因為 Camera 只有單純的影像資訊,所以要另外抓取麥克風(Microphone),才能同時輸出影響和訊號。
最後,把影像和聲音統統塞到串流類別中,利用 publish 方法送出到 Server,第一個是串流的名稱,第二個參數則還沒研究。只知道如果不加的話,訊號也能夠順利送出。之後如果搞清楚後再來補充。
如果想看廣播出來的影像,可以作一個 Video 物件,將 Camera 和 Microphone 加入(attachCamera, attachAudio),倒是不用花費頻寬再寫一下接收的程式。
註︰
範例的 flash 程式是用 ActionScript 2.0 以 Flash 7 發佈,所以是第一代虛擬機 AVM1,而改以 ActionScript 3.0 以 Flash CS4 發佈,會使用第二代虛擬機 AVM2 ,據說效能可以快上十倍,不過我的猜想錯誤,畫質並沒有明顯地提高。
沒有留言:
張貼留言