Flex 配置FMS,并让第一个视频流发布成功(简单实现)
我这里是做了两个程序,其实一个程序也能达到目的,只不过这样看起来更清晰易懂一些.
分别建立两个项目,一个为发送视频,一个为接受视频(这样做仅仅是为了更好的看清楚而已) 发送端代码如下: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768"> <mx:Script> <![CDATA[ import flash.media.Camera; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import mx.controls.Alert; private var vi:Video;//播放器 private var cam:Camera;//摄像头 private var inStream:NetStream; //网络流 private var outStream:NetStream; //网络输出流 private var nc:NetConnection; //网络连接 private var connectionURL:String="rtmp://localhost/test"; //FMS媒体服务器地址 /*连接媒体服务器*/ protected function connectFMS():void { nc=new NetConnection(); //创建连接对象 nc.client=this; //将客户端设置为本地 nc.connect(connectionURL,"admin","admin"); //第一个参数是连接地址,后面是账号密码(可省略) nc.addEventListener(NetStatusEvent.NET_STATUS,ncHandler);//流状态侦听器 } //判断FMS服务器连接 protected function ncHandler(evt:NetStatusEvent):void { if (evt.info.code == "NetConnection.Connect.Success") { //开始录制 beginRec(); } else { Alert.show("连接失败","提示"); } } //开始录制 protected function beginRec():void { cam=Camera.getCamera(); cam.setMode(320,240,30);//大小与帧率 cam.setQuality(0,100); //设置清晰度 outStream=new NetStream(nc); outStream.client=this;//将客户端设置为this,如有特殊需求可以写一个自定义的client,比如传播文本信息 outStream.attachCamera(cam);//激活视频 outStream.publish("1111","live");//第二个参数live代表实况流,当连接中断后,在FMS流媒体服务器中不会残留视频文件 } private function sendMsg():void{ // outStream.send("myFunction",cam.name,msgTxt.text); // trace("发送结束"); } //停止录制 protected function endRec():void { //outStream.close(); //Alert.show("成功关闭摄像头!","提示") } ]]> </mx:Script> <mx:Button label="发送视频" click="connectFMS()"/> </mx:Application> 接收端代码如下: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768"> <mx:Script> <![CDATA[ import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import mx.controls.Alert; private var conn:NetConnection; //网络连接 private var inStream:NetStream; //网路接受流 private var outStream:NetStream; //网路输出流 private var connectName:String="1111"; //网络连接名称只有相同的链接名称才能对应相同的发布方视频流 private var serverURL:String="rtmp://localhost/test"; //FMS服务器地址 private var vi:Video; //链接FMS服务器 private function connectServer():void { conn=new NetConnection(); conn.client=this; conn.connect(serverURL,"admin"); conn.addEventListener(NetStatusEvent.NET_STATUS,connHandler); //添加网络监听事件 } private function connHandler(evt:NetStatusEvent):void { if (evt.info.code == "NetConnection.Connect.Success") { getVideo(); } else { Alert.show("网络连接失败!","提示"); } } //开始接受视频 private function getVideo():void { inStream=new NetStream(conn); inStream.addEventListener(NetStatusEvent.NET_STATUS,inStreamHandler); inStream.client=this; inStream.play(connectName); //1111为流的名字,对应于视频流发布端的publish("1111","live"). vi=new Video(); vi.width=viewDisplay.width; vi.height=viewDisplay.height; vi.smoothing=true; vi.attachNetStream(inStream); viewDisplay.addChild(vi); } private function stopVideo():void{ inStream.close(); conn.close(); viewDisplay.removeChild(vi); } private function inStreamHandler(evt:NetStatusEvent):void { } ]]> </mx:Script> <mx:VideoDisplay id="viewDisplay" x="141" y="125" width="332" height="232"/> <mx:Button x="141" y="95" label="开始接受视频流" click="connectServer()"/> </mx:Application>
6.默认名称为_default_,在这里敲回车键默认如图: 7.发送方与接收方运行的先后顺序没有强制规定,先打开哪个都能在接收方接受到视频流 package cn.com.util { import mx.controls.Label; import mx.controls.TextArea; public class CustomClient { private var text:Label; private var msgArea:TextArea; public function CustomClient(text:Label,msgArea:TextArea) { this.text=text; this.msgArea=msgArea; } public function myFunction(event:String,msg:String):void { text.text=event; msgArea.text+=msg+"nn"; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |