加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 配置FMS,并让第一个视频流发布成功(简单实现)

发布时间:2020-12-15 05:08:16 所属栏目:百科 来源:网络整理
导读:我这里是做了两个程序,其实一个程序也能达到目的,只不过这样看起来更清晰易懂一些. 分别建立两个项目,一个为发送视频,一个为接受视频(这样做仅仅是为了更好的看清楚而已) 发送端代码如下: ?xml version="1.0" encoding="utf-8"?mx:Application xmlns:mx="htt
我这里是做了两个程序,其实一个程序也能达到目的,只不过这样看起来更清晰易懂一些.

分别建立两个项目,一个为发送视频,一个为接受视频(这样做仅仅是为了更好的看清楚而已)
发送端代码如下:
<?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>


写好这两个工程以后咱们来配置FMS(如果仅仅是简单实现的话,其实配置起来真的不是很难的)

1.先在X:AdobeFlash Media Server 3.5applications建立一个目录,名称为test里面可以没有任何东西(如果需要特殊配置,在此目录下有live和vod两个目录下有参考).

2.如果已经启动了FMS服务器,则重启FMS服务器

3.打开X:AdobeFlash Media Server 3.5tools目录下的StartServerService.bat批处理文件,启动服务器
4.服务器启动成功后,打开同目录下的fms_adminConsole.swf文件(或fms_adminConsole.html)

5.在登录之后选择左下角的NewInstance,选择test如图:

6.默认名称为_default_,在这里敲回车键默认如图:

7.发送方与接收方运行的先后顺序没有强制规定,先打开哪个都能在接收方接受到视频流

附录:
如有必要可以写一个自定义的client(其实就是一个VO)用于处理一些特殊需求

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";
	    }
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读