red5 視頻應用開發指南。第二個項目成功運行經驗(2)
阿新 • • 發佈:2017-11-08
ces 連接 con array prop keyset 上線 全局 move
1,第二個項目通過最開始使用書本介紹的red5 1.0.0 ,發現連接的時候總是出現
NetConnection.Connect.Failed undefined
連接出錯,具體代碼是這樣的
服務端代碼
package com.red5app; import java.util.HashMap; import java.util.List; import java.util.Map; import org.red5.server.adapter.ApplicationAdapter; import org.red5.server.api.IConnection;import org.red5.server.api.Red5; import org.red5.server.api.scope.IScope; import org.red5.server.api.service.IServiceCapableConnection; import org.red5.server.api.so.ISharedObject; public class Application extends ApplicationAdapter{ private Map<String,IConnection> clientDic = newHashMap<String,IConnection>(); //最開始執行的程序 public Boolean appStart(){ return true; } //斷開連接時執行的程序 public void appStop(){ } //連接時執行的程序 public boolean connect (IConnection conn,IScope scope,Object[] params){ if(params.length==0){ rejectClient("Must pass the login name."); } String loginname=params[0].toString(); conn.setAttribute("UserName", loginname); if(!clientDic.keySet().contains(loginname)) { clientDic.put(loginname, conn); ISharedObject so = getSharedObject(scope, "UserSO"); if(so==null) {
//發現如果註釋掉下面三句就能連接成功,所以可以肯定的是軟件哪裏出了問題 this.createSharedObject(scope, "UserSO", true); so = getSharedObject(scope, "UserSO"); } so.setAttribute("userlist", clientDic.keySet().toArray()); } else{ rejectClient("The same user has logged in already"); } return super.connect(conn, scope, params); } public void disconnect (IConnection conn,IScope scope){ String loginname=conn.getAttribute("UserName").toString(); if(loginname!=null){ clientDic.remove(loginname); ISharedObject so= getSharedObject(scope,"UserSO"); if(so!=null){ so.setAttribute("userlist",clientDic.keySet().toArray()); } } super.disconnect(conn, scope); } /** * @category 發送全局消息,所有上線的人都能夠看到 * @param params */ public void sendMessage(List<String> params) { IConnection conn = Red5.getConnectionLocal(); IScope scope = conn.getScope(); ISharedObject so = getSharedObject(scope, "UserSO"); // log.info("Server: call sendMessage and params " + params.get(0)); so.sendMessage("receiveMsg", params); } /** * @category 發送私聊信息,只有被選中的人能夠看到信息 * @param params */ public void sendPrvMessage(List<String> params) { if(params.size() == 3) { String sender = params.get(0); String content = params.get(1); String receiver = params.get(2); if(clientDic.keySet().contains(receiver)) { IConnection conn = clientDic.get(receiver); if(conn instanceof IServiceCapableConnection) { IServiceCapableConnection sc = (IServiceCapableConnection) conn; sc.invoke("receivePrvMsg", new Object[]{sender,content}); } } } } }
Flash cs3的代碼是這樣的
import flash.net.NetConnection; import flash.events.NetStatusEvent; import flash.events.MouseEvent; import flash.net.SharedObject; var nc:NetConnection=new NetConnection(); nc.connect("rtmp://127.0.0.1/red5_6","asasa"); nc.addEventListener(NetStatusEvent.NET_STATUS,netStatus); nc.client = this; function netStatus(event : NetStatusEvent ):void { switch(event.info.code){ case "NetConnection.Connect.Rejected": trace("連接被拒絕!");break; case "NetConnection.Connect.Success": var so:SharedObject = SharedObject.getRemote("UserSO",nc.uri,true); so.addEventListener(SyncEvent.SYNC,onSync); so.connect(nc); break; } trace(event.info.code); trace(event.info.application); } function onSync(event:SyncEvent):void{ trace("event"+event); for(var i:Object in event.changeList) { var changeobj:Object =event.changeList[i]; trace("Change Code:"+changeobj.code); } } function receiveMessage(mesg:String):void { trace("mesg"+mesg); }
//發現如果註釋掉下面三句就能連接成功,所以可以肯定的是軟件哪裏出了問題
this.createSharedObject(scope, "UserSO", true);
so = getSharedObject(scope, "UserSO");
so.setAttribute("userlist", clientDic.keySet().toArray());
換個
版本的軟件,安裝過程是這這樣的:
安裝步驟:
1).解壓壓縮文件到沒有空格和中文的目錄中
2).配置環境變量
RED5_HOME=red5-server的解壓目錄的地址
在PATH=;%RED5_HOME%;
保存OK!
3).運行cmd
4).進入dos命令窗口,敲入red5 回車 OK!
5).顯示服務正在啟動中…
出現192.168.1.101-5080 表示啟動成功!
這個ip我是配置了red5-server 目錄 conf 下面 的red5-properties
文件
初次測試可以不用配置,訪問時 用localhost訪問即可
如果想要配置,配置即可
沒有配置之前的訪問鏈接:http://localhost:5080
配置了IP之後的訪問鏈接:http://192.168.1.108:5080
6)下載oflaDemo,下載 好了之後將文件解壓到red5-server目錄中 webapps 目錄中即可
下面給出oflaDemo的下載地址:
鏈接:http://pan.baidu.com/s/1ntCiJod 密碼:au2z
7).在dos中ctrl+c 按 y 關閉服務器 ,再重新輸入red5
啟動即可!
8).然後訪問
來自:http://blog.csdn.net/tgendure/article/details/50166305
發現可以了,顯示連接成功
NetConnection.Connect.Success
null
event[SyncEvent type="sync" bubbles=false cancelable=false eventPhase=2 changeList=[object Object]]
Change Code:change
red5 視頻應用開發指南。第二個項目成功運行經驗(2)