Flex4 简单视频聊天

 

通过 FMS 实现简单的视频聊天其实很容易,现在以双向视频聊天为例子。双向视频聊天需要一个视频发布流和一个视频播放流。

 

发布流的实现步骤是:

1、 链接 FMS 服务器;

2、 FMS 发布视频流。

Flex4 下的核心代码是:

var pnc:NetConnection = new NetConnection();

pnc.connect( "rtmp://localhost/VideoChat" );

           

var pns:NetStream = new NetStream(pnc);

pns 绑定摄像头和麦克风;

pns.publish( "publishName" , "live" );

注意:在发布方法publish() 中后一参数为“live ”,表示时时视频流。

 

播放流的实现步骤是:

1 、链接 FMS 服务器;

2 、获取视频流进行播放。

Flex4 下的核心代码是:

var rnc = new air.NetConnection();

rnc.connect( "rtmp://localhost/VideoChat" );

           

var rns = new NetStream(rnc);

r ns 绑定到video;

rns.play( "publishName" , "live" );

注意:这里的publishName 必须与发布流的流名一致

 

 

完整代码如下:

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FF7999, #FE7F9D]" height="388"> <mx:Panel x="10" y="10" width="340" height="282" layout="absolute" title="视频发布端"> <mx:VideoDisplay x="0" y="0" width="320" height="240" id="PublishVideo"/> </mx:Panel> <mx:Panel x="366" y="10" width="340" height="282" layout="absolute" title="视频接收端" id="playPan"> <mx:VideoDisplay x="0" y="0" width="320" height="240" id="RecordVideo" /> </mx:Panel> <mx:Button x="106" y="316" label="发布视频" fontWeight="normal" click="onPublishClick()"/> <mx:Button x="488" y="317" label="接收视频" fontWeight="normal" click="onRecordClik()"/> <mx:Script> <!--[CDATA[ import flash.events.*; private var pnc:NetConnection; private var rnc:NetConnection; private var pns:NetStream; //发布流 private var rns:NetStream; private var cam:Camera; private var mic:Microphone; private var video:Video; private function onPublishClick():void { pnc = new NetConnection(); pnc.connect("rtmp://localhost/PublishStreams"); pnc.addEventListener(NetStatusEvent.NET_STATUS,onPublishNetStatusHandler); cam = Camera.getCamera(); mic = Microphone.getMicrophone(); this.PublishVideo.attachCamera(cam); } private function onPublishNetStatusHandler(evt:NetStatusEvent):void { this.lbPublish.text=evt.info.code; if(evt.info.code=="NetConnection.Connect.Success") { pns = new NetStream(pnc); pns.attachAudio(mic); pns.attachCamera(cam); pns.client=this; pns.publish("publishName","live"); } } private function onRecordClik():void { rnc = new NetConnection(); rnc.connect("rtmp://localhost/PublishStreams"); rnc.addEventListener(NetStatusEvent.NET_STATUS,onReordNetStatusHandler); } private function onReordNetStatusHandler(evt:NetStatusEvent):void { this.lbRecord.text=evt.info.code; if(evt.info.code=="NetConnection.Connect.Success") { rns = new NetStream(rnc); rns.client=this; video = new Video(); video.width=320; video.height=240; video.attachNetStream(rns); this.RecordVideo.addChild(video); rns.play("publishName","live"); //这里的publishName必须与发布流的流名一致 } } ]]--> </mx:Script> <mx:Label x="35" y="348" width="304" id="lbPublish"/> <mx:Label x="391" y="348" width="296" id="lbRecord"/> </mx:Application>  

在这里,需要注意组件 s:VideoDisplay 的使用。要 s:VideoDisplay 播放指定视频可通过两个方法:

1 、把该视频的地址赋值给属性 source

2 、把一个 Video 对象添加到 s:VideoDisplay 实例中(本文例子就是使用该方法)。

 

本文示例程序下载:http://download.csdn.net/source/3030738

 

 

 

你可能感兴趣的:(function,video,Flex,layout,application,CAM)