• 2009-05-15
  • LearningFMS3中文版第5章(2)
  • 文章来源:www.hcxmflash.cn

    5.4.世界上最简单的双向的A/V聊天的应用程序

    为了制作一个简单的双向A/V聊天应用程序,需要两个模块。紧记FMS3应用程序只是简单的表现在你使用的RTMP URL为简单的名称,你可以在一个应用程序中有多个模块。换句话说就是,应用的名称是在服务端的目录的名称。

    总而言之,你将要开始制作这个应用程序。这个应用程序的名称将会很简单。你将会有两个模块,Easy1和Easy2。每个模块会通过存储在服务端的 应用程序,连接到FMS3。对于这个应用程序,每个模块将会写成用来接受其它人发送的流。如你所见,一个简单的换来做所有真实的工作。所以任务真正地包括 写一个模块,然后复制它,做一些修改。图5-2展示了两个视频将出现的区域,和它们的实例名:

    图5-2. Video instances

    开始之前,回顾一下需要的以下类和对像:

    Classes

    NetConnection

    NetStream

    NetStatusEvent

    Camera

    Microphone

    Video

    按以下步骤来制作这个聊天应用程序:

    1. 建立一个Easy1.fla

    2. 用文本工具添加一个文本,内容为Easy #1,x=205, y=223

    3. 在文档类中输入Easy1

    4. 建立一个Easy1.as与Easy1.fla同一目录

    Example 5-1. Easy1.as

    Code View:

    package
    {
      import flash.display.Sprite;
      import flash.events.NetStatusEvent;
      import flash.net.NetConnection;
      import flash.net.NetStream;
      import flash.media.Camera;
      import flash.media.Microphone;
      import flash.media.Video;
     
      public class Easy1 extends Sprite
      {
            private var nc:NetConnection;
            private var good:Boolean;
            private var rtmpNow:String;
            private var nsIn:NetStream;
            private var nsOut:NetStream;
            private var cam:Camera;
            private var mic:Microphone;
            private var vidLocal:Video;
            private var vidStream:Video;
     
     
            public function Easy1 ()
            {
                 rtmpNow="rtmp://your.web.com/easy";
                 nc=new NetConnection();
                 nc.connect (rtmpNow);
                 nc.addEventListener (NetStatusEvent.NET_STATUS,checkCon);
                 setCam ();
                 setMic ();
                 setVideo ();
            }
     
            private function checkCon (e:NetStatusEvent):void
            {
                 good=e.info.code == "NetConnection.Connect.Success";
                 if (good)
                 {
                       nsOut=new NetStream(nc);
                       nsOut.attachAudio (mic);
                       nsOut.attachCamera (cam);
                       nsOut.publish("left","live");
     
                       nsIn=new NetStream(nc);
                       nsIn.play("right");
                       vidStream.attachNetStream(nsIn);
                 }
            }
     
            private function setCam()
            {
                 cam=Camera.getCamera();
                 cam.setKeyFrameInterval (9);
                 cam.setMode (240,180,15);
                 cam.setQuality (0,80);
            }
     
            private function setMic()
            {
                 mic=Microphone.getMicrophone();
                 mic.gain=85;
                 mic.rate=11;
                 mic.setSilenceLevel(15,2000);
            }
     
            private function setVideo()
            {
                 vidLocal=new Video(cam.width,cam.height);
                 addChild(vidLocal);
                 vidLocal.x=15; vidLocal.y=30;
                 vidLocal.attachCamera(cam);
     
                 vidStream=new Video(cam.width,cam.height);
                 addChild(vidStream);
                 vidStream.x=(vidLocal.x+ cam.width +10); vidStream.y=vidLocal.y;
            }
      }
    }

    6. 确保rtmpNow=”rtmp://your.web.com/easy”反射你自已的FMS URL,不管它是在你本机,LAN IP地址或者远程服务器的URL

    7. 发布HTML和SWF

    这已经完成了第一个模块,测试它,你会在左边窗口中看到你自已。下一步将简单的改变第一个模块。

    8. Easy1.fla另存为Easy2.fla

    9. 把文本改为Easy2

    10.把Easy1.as另存为Easy2.as

    11.改变类名称和构造函数的名称为Easy2:

    public class Easy2 extends Sprite
    ....
    public function Easy2()

    12.在checkCon函数中,改变以下两行:

    nsOut.publish("left","live");->nsOut.publish("right","live");
    ....
    nsIn.play("right"); ->nsIn.play("left");

    13.保存Easy2.as文件。现在你的两个模块应用程序已经完成。

    步骤12显示了应用程序中的关键几行,Easy1发布一个叫left的流和播放一个叫right的流。Easy2刚好与Easy1相反,所以每个模块的用户可以播放另一个人的流。

    测试这个应用程序,理论上你需要两个摄像头和两台电脑。一个用户运行Easy1.html,另一个用户运行Easy2.html。不管在LAN或者网上的远程服务器,两个模块都要能访问到FMS3服务器。图5-3中当你运行两个模块时你应该看到的。

    图5-3. Two-way Audio-Video chat

    如果可以在远端访问你的IP地址,那么你将可以与世界上的任何人聊天。

  • x
Powered by LuoYe Lab , Skin in Kaven,XiaoXu RSS Copyright © 2008