文章来源: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同一目录
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地址,那么你将可以与世界上的任何人聊天。