1. 程式人生 > >red5 視頻應用開發指南。第二個項目成功運行經驗(2)

red5 視頻應用開發指南。第二個項目成功運行經驗(2)

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 = new
HashMap<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)