基於java Red5服務器客戶端視頻聊天室搭起來了

  基於java Red5服務器客戶端視頻聊天室(ldfu)

開發環境:

Red5(視頻服務端內嵌Tomcat6),Mina(高性能  socket通訊框架),

Flash(Flex) Builder4,Myeclipse8.0,java sdk6.0

 

一.先看看客戶端的界面,呵呵。

 (1)Flash Buidler開發原型圖



 

(2)全屏圖:

 

   (3)UI部分源碼:

  (4)服務器啓動:



 

(5)開始視頻接受對方數據流以及聊天記錄:



 

 

二.原理:

 (1)服務器啓動ServerSocket監聽RTSP協議數據流;

  @Override
  public boolean appStart(IScope arg0) {
   /**
    * 此應用啓動時,第一個觸發
    */
    System.out.println("服務器啓動成功!");
     return super.appStart(arg0);
   }

 (2)客戶端Flash啓動獲取攝像頭以及音頻輸入顯示在本地左下方區域;

     private var rtmpUrl:String="rtmp://192.168.1.100/chatlive";

 camera= Camera.getCamera();
     if (camera!=null)
     {
      writeMessage("您的系統已經安裝攝像頭");
      camera.addEventListener(ActivityEvent.ACTIVITY,cameraActivityHander);
      camera.addEventListener(StatusEvent.STATUS, cameraStatusHander);
      this.myVideo.attachCamera(camera);
     }
     else
     {
      writeMessage("您的系統沒有安裝攝像頭");
     }
     mic = Microphone.getMicrophone();
     if (mic!=null) {
      writeMessage("您的系統已經安裝麥克風");
      mic.setSilenceLevel(0);
      mic.gain = 100;
     }
     else
     {
      writeMessage("您的系統沒有安裝麥克風");
     }

 (3)客戶端Flash連接Red5服務器是否已經存在,存在則從服務器獲取一個

自己的ID.不存在着提示:

   nc = new NetConnection();
    nc.client = this;
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    nc.connect(rtmpUrl, localUsername);

 (4)哈哈,其他代碼暫時不公佈,呵呵。

三.此視頻架構缺點:

1.客戶端需要服務器來中轉數據流,嚴重依賴於服務器;

2.嚴重地佔用服務器的資源,包括CPU,內存以及網絡帶寬,可擴展性差;

  除非像ku6那樣每年給電信燒十幾億的帶寬費;客戶端越多,服務器

需要越多,帶寬要求越高。

 

四.感言:

這種架構沒有太多錢投資情況下,幾乎是無法運行的,呵呵。所以我想基於

P2P架構進行點對點聊天。經過多天的摸索,目前已經找到一種點對點直接視頻

方式,它不需要服務器中轉。不過稍微深入一點的技術,其技術難點:

  (1)如何穿透在NAT服務器後面的私有內部網絡進行UDP數據傳送,因爲你的內部

      IP地址在外面是看不到,外面也是無法主動連接內部IP;

  (2)如何穿透防火牆的阻攔;呵呵,現在的公司一般都打開http 80端口,我們就在這個

   上面下功夫,那就是利用Http隧道穿越!或JXTA技術,is No Problem。

  (3)以怎麼樣的協議傳送視頻音頻數據

  (4)如何獲取攝像頭以及聲音;

 目前(1),(2)兩點已經實現基本的解決方案代碼,加油,有挑戰性,呵呵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章