`
hereson
  • 浏览: 1449937 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

视频监控软件(1)---FMS视频流共享

    博客分类:
  • fms2
阅读更多

呵呵!临近毕业了,本人选择的毕业设计题目是(基于B/S模式的视频监控软件的设计与实现),对于这个题目,我打算用Flex+FMS(FlashMediaServer)进行开发,从今天起,本人会不定期的把一些成果拿出来与大家分享,有什么描述不妥的地方还请大家批评指正。

 

这次要解决的问题是FMS的视频流共享。问题的大概描述是:我们把被监控的一方叫做Server,对Flex熟悉的同学都知道,Flex中的<mx:VideoDisplay>+AS3.0中的Camera.getCamera()组合可以很容易的捕捉摄像头的视频数据并将其显示在<mx:VideoDisplay>中,但是这里有个问题,这里所谓的显示,只是基于本地机器,而捕捉摄像头的动作也只是捕捉本机的摄像头,我们要设计的视频监控软件是B/S模式,假如我们把编译好的swf文件放到WebAppServer下,用户远程访问,将看不到Server端的实时视频,这样至少从实时监控来说,就完全失去了意义!

 

解决思路:

创建两个文件,一个文件用来捕捉Server端的视频数据,并将其发布到FMS中,假设这段视频流名为wwww。

另一个文件用来显示给客户,其所起的作用就是播放Server端口发布到FMS的wwww视频流。

 

实现步骤:

1  在FMS_HOME/applications/下建立一个example文件夹,用来做本例的FMS工程实例。

2  编写<解决思路>中涉及的第一个文件server.mxml

Xml代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="571">  
  3.     <mx:Script>  
  4.         <![CDATA[  
  5.             import mx.core.UIComponent;  
  6.             import flash.media.Microphone ;  
  7.             import mx.controls.Alert ;  
  8.             import flash.display.Graphics ;  
  9.             //测试网络可行性  
  10.             private var conne:NetConnection = new NetConnection() ;  
  11.             private function xianshi():void {  
  12.                 //必须  在AS3.0中默认的ObjectEncoding为AMF3,但是FMS不支持AMF3,所以  
  13.                 //要显示的声明为AMF0  
  14.                 conne.objectEncoding = ObjectEncoding.AMF0 ;  
  15.                 //FMS所在机器的IP地址  
  16.                 conne.connect("rtmp://172.30.209.75/example") ;  
  17.                 conne.addEventListener(NetStatusEvent.NET_STATUS,chuli) ;  
  18.             }  
  19.               
  20.             private var nnnns:NetStream = null ;//专门用来向连接到服务器的客户端提供共享视频流  
  21.             private var time:String = null ;//定义时间寄存器  
  22.             private function chuli(e:NetStatusEvent):void {  
  23.                 var result:String = e.info.code ;  
  24.                 switch(result) {  
  25.                     case "NetConnection.Connect.Success":  
  26.                     vd.attachCamera(Camera.getCamera()) ;  
  27.                     nnnns = new NetStream(conne) ;  
  28.                     nnnns.attachAudio(Microphone.getMicrophone()) ;  
  29.                     nnnns.attachCamera(Camera.getCamera()) ;  
  30.                     //播放server端的视频流  
  31.                     nnnns.publish("wwww","live") ;  
  32.                     break;  
  33.                     case "NetStream.Play.StreamNotFound":  
  34.                     Alert.show("失败") ;  
  35.                     break;  
  36.                     default :  
  37.                     Alert.show("缺省") ;  
  38.                     break ;  
  39.                 }  
  40.             }  
  41.             //停止播放  
  42.             private function tingzhi():void {  
  43.                 nnnns.close() ;  
  44.                 conne.close() ;  
  45.             }  
  46.               
  47.         ]]>  
  48.     </mx:Script>  
  49.     <mx:VideoDisplay x="0" y="0" width="264" height="213" id="vd"/>  
  50.        
  51.     <mx:Button label="连接服务器" click="xianshi()" x="10" y="247">  
  52.     </mx:Button>  
  53.     <mx:Button click="tingzhi()" x="99" y="247" width="125" height="21" label="断开与服务器连接">  
  54.            
  55.     </mx:Button>  
  56.     <mx:VideoDisplay x="285" y="11" width="276" height="202" id="vv"/>  
  57. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="571">
	<mx:Script>
		<![CDATA[
			import mx.core.UIComponent;
			import flash.media.Microphone ;
			import mx.controls.Alert ;
			import flash.display.Graphics ;
			//测试网络可行性
			private var conne:NetConnection = new NetConnection() ;
			private function xianshi():void {
				//必须  在AS3.0中默认的ObjectEncoding为AMF3,但是FMS不支持AMF3,所以
				//要显示的声明为AMF0
				conne.objectEncoding = ObjectEncoding.AMF0 ;
				//FMS所在机器的IP地址
				conne.connect("rtmp://172.30.209.75/example") ;
				conne.addEventListener(NetStatusEvent.NET_STATUS,chuli) ;
			}
			
			private var nnnns:NetStream = null ;//专门用来向连接到服务器的客户端提供共享视频流
			private var time:String = null ;//定义时间寄存器
			private function chuli(e:NetStatusEvent):void {
				var result:String = e.info.code ;
				switch(result) {
					case "NetConnection.Connect.Success":
                    vd.attachCamera(Camera.getCamera()) ;
					nnnns = new NetStream(conne) ;
					nnnns.attachAudio(Microphone.getMicrophone()) ;
					nnnns.attachCamera(Camera.getCamera()) ;
					//播放server端的视频流
					nnnns.publish("wwww","live") ;
                    break;
                    case "NetStream.Play.StreamNotFound":
                    Alert.show("失败") ;
                    break;
                    default :
                    Alert.show("缺省") ;
                    break ;
				}
			}
			//停止播放
			private function tingzhi():void {
				nnnns.close() ;
				conne.close() ;
			}
			
		]]>
	</mx:Script>
	<mx:VideoDisplay x="0" y="0" width="264" height="213" id="vd"/>
	
	<mx:Button label="连接服务器" click="xianshi()" x="10" y="247">
	</mx:Button>
	<mx:Button click="tingzhi()" x="99" y="247" width="125" height="21" label="断开与服务器连接">
		
	</mx:Button>
	<mx:VideoDisplay x="285" y="11" width="276" height="202" id="vv"/>
</mx:Application>

 

3  编写<解决思路>中涉及的第二个文件client.mxml,此文件显示给用户远程观看

Xml代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.     <mx:Script>  
  4.         <![CDATA[  
  5.             import mx.core.UIComponent;  
  6.             import flash.media.Microphone ;  
  7.             import mx.controls.Alert ;  
  8.             //测试网络可行性  
  9.             private var conne:NetConnection = new NetConnection() ;  
  10.             private function xianshi():void {  
  11.                 conne.objectEncoding = ObjectEncoding.AMF0 ;  
  12.                 conne.connect("rtmp://172.30.209.75/example") ;  
  13.                 //网络连接时间处理器  
  14.                 conne.addEventListener(NetStatusEvent.NET_STATUS,chuli) ;  
  15.             }  
  16.               
  17.             private var nnnns:NetStream = null ;  
  18.               
  19.             private function chuli(e:NetStatusEvent):void {  
  20.                 var result:String = e.info.code ;  
  21.                 switch(result) {  
  22.                     case "NetConnection.Connect.Success":  
  23.                     bofang() ;  
  24.                     break;  
  25.                     case "NetStream.Play.StreamNotFound":  
  26.                     Alert.show("失败") ;  
  27.                     break;  
  28.                     default :  
  29.                     Alert.show("缺省") ;  
  30.                     break ;  
  31.                 }  
  32.             }  
  33.               
  34.             private function tingzhi():void {  
  35.                 nnnns.close() ;  
  36.                 conne.close() ;  
  37.             }  
  38.             //网络连接成功时 播放server端发布到FMS的wwww视频流  
  39.             private function bofang():void {  
  40.                 nnnns = new NetStream(conne) ;  
  41.                 var v:Video = new Video() ;  
  42.                 v.attachNetStream(nnnns) ;  
  43.                 v.width = 276 ;  
  44.                 v.height = 202 ;  
  45.                 vv.addChild(v) ;  
  46.                 nnnns.play("wwww") ;  
  47.             }  
  48.         ]]>  
  49.     </mx:Script>  
  50.     <mx:VideoDisplay x="0" y="0" width="264" height="213" id="vd"/>  
  51.        
  52.     <mx:Button label="连接服务器" click="xianshi()" x="72" y="247">  
  53.     </mx:Button>  
  54.     <mx:Button click="tingzhi()" x="190" y="247" width="123" height="21" label="断开与服务器连接">  
  55.            
  56.     </mx:Button>  
  57.     <mx:VideoDisplay x="285" y="11" width="276" height="202" id="vv"/>  
  58.        
  59. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.core.UIComponent;
			import flash.media.Microphone ;
			import mx.controls.Alert ;
			//测试网络可行性
			private var conne:NetConnection = new NetConnection() ;
			private function xianshi():void {
				conne.objectEncoding = ObjectEncoding.AMF0 ;
				conne.connect("rtmp://172.30.209.75/example") ;
				//网络连接时间处理器
				conne.addEventListener(NetStatusEvent.NET_STATUS,chuli) ;
			}
			
			private var nnnns:NetStream = null ;
			
			private function chuli(e:NetStatusEvent):void {
				var result:String = e.info.code ;
				switch(result) {
					case "NetConnection.Connect.Success":
					bofang() ;
                    break;
                    case "NetStream.Play.StreamNotFound":
                    Alert.show("失败") ;
                    break;
                    default :
                    Alert.show("缺省") ;
                    break ;
				}
			}
			
			private function tingzhi():void {
				nnnns.close() ;
				conne.close() ;
			}
			//网络连接成功时 播放server端发布到FMS的wwww视频流
			private function bofang():void {
				nnnns = new NetStream(conne) ;
				var v:Video = new Video() ;
				v.attachNetStream(nnnns) ;
				v.width = 276 ;
				v.height = 202 ;
				vv.addChild(v) ;
				nnnns.play("wwww") ;
			}
		]]>
	</mx:Script>
	<mx:VideoDisplay x="0" y="0" width="264" height="213" id="vd"/>
	
	<mx:Button label="连接服务器" click="xianshi()" x="72" y="247">
	</mx:Button>
	<mx:Button click="tingzhi()" x="190" y="247" width="123" height="21" label="断开与服务器连接">
		
	</mx:Button>
	<mx:VideoDisplay x="285" y="11" width="276" height="202" id="vv"/>
	
</mx:Application>

 

 

4  启动FMS,打开编译好的server.swf,先点击按钮:连接服务器

 

5  把编译好的client.swf拷贝到任何客户端,然后点击按钮:连接服务器,即可以看到server端传送过来的视频流。

如果想要部署swf文件到WebApplication下,可以把FlexBuilder工程目录下的server.html和client.html拷贝到相应的目录,然后通过URL访问。

 

好了,关于FMS视频流共享的问题到此为止,各位有何疑问,不妨留言一起探讨!下一次我将解决怎样在不切断server端输出流的情况下进行视频录像。

分享到:
评论

相关推荐

    FMS3.0实现视频会议代码

    1. **多路音视频流同步**:每个参会者都需要发送自己的音视频流到服务器,同时接收其他参会者的音视频流。FMS3.0通过RTMP协议处理这些流的传输,确保不同设备间的同步。 2. **带宽管理**:视频会议需要根据网络状况...

    FMS与客户端通信 编程

    FMS 4.5 是Adobe提供的流媒体服务器,它支持实时媒体流传输、实时数据共享以及与客户端应用的交互。 1. **客户端呼叫服务器** 在客户端呼叫服务器的场景中,我们首先看到服务器端的`main.asc`代码,定义了一个名...

    flex连接到FMS详解

    FMS(Flash Media Server)是Adobe提供的多媒体服务器平台,用于实时流媒体和互动应用。本文将详细阐述如何使用Flex连接到FMS,并实现视频发送功能。 **一、准备工作** 1. **开发工具**: 首先,你需要安装Flash MX...

    Flash Media Server (FMS)教程

    5. **Camera and Microphone**:用于捕捉和传输音频及视频流。 ### 二、设置开发环境 1. **启动FMS服务器**:确保服务器已经启动,可以通过控制台或命令行工具管理。 2. **配置连接URL**:例如`new_nc.connect('...

    fms3.5开发指南

    FMS是用于提供流媒体和交互式服务的服务器,支持即时启动、直播视频流和根据用户带宽调整流速率等功能。本指南涵盖了从服务器版本选择、FMS的基本概念、开发环境配置、简单的"Hello World"应用程序创建,到应用程序...

    as和后台通讯 URLLoader(URLStream) FlashRemoting XMLSocket(Socket) FMS/FCS

    - 它们支持视频流、音频流以及使用AMF进行的高级数据通信,如FlashRemoting。 - FMS/FCS可以扩展Flash应用程序的功能,例如实时视频聊天、多人游戏和实时数据共享。 - 通过FMS/FCS,开发者可以构建高度互动的应用...

    FlashMediaServer开发入门与配置

    - **录制功能**:FMS可以录制用户的音视频流,方便后期处理或点播。 - **互动性**:通过共享对象,FMS允许用户之间进行实时交互,如聊天室、游戏等。 - **可扩展性**:开发者可以通过ActionScript 3.0在服务器端编写...

    Flash Media Server 入门教程.doc

    Flash Media Server(简称FMS)是Adobe Systems公司推出的一款专为流媒体传输设计的服务器软件。它支持实时数据和流媒体传输,广泛应用于在线视频播放、直播、互动式远程教育等领域。FMS最初被称为Flash ...

    FMS Log Analyzer-开源

    Adobe Flash Media Server (FMS) 是一款强大的实时流媒体服务器,用于发布视频、音频和其他交互式富媒体内容。在FMS运行过程中,它会生成Access日志,记录所有与服务器交互的详细信息。这些日志数据对于监控服务器...

    red5入门教程.....

    其核心功能包括音频和视频流的实时传输、录制和回放、共享对象的支持以及远程调用能力,适用于视频网站、在线教育、视频会议和网络游戏等多个领域。 2. **Red5安装步骤**: - **环境准备**:首先,需访问java.sun....

    Flash Media Server 3.5 开发的20多个例子

    Flash Media Server(FMS)是Adobe公司推出的一款专业级的流媒体服务器,它为开发者提供了一种高效、稳定的方式来发布和管理实时音频、视频内容,以及交互式的富媒体应用程序。本资料集合了针对Flash Media Server ...

    red5-server

    Red5 Server是一款开源的流媒体服务器,主要用于处理实时的音频、视频流,支持RTMP(Real Time Messaging Protocol)、HLS(HTTP Live Streaming)等多种协议。它由Java编写,因此可以在任何支持Java的平台上运行,...

    AS3高手之路

    - **Flash Media Server (FMS)**:FMS是Adobe提供的一款流媒体服务器,用于实现视频直播、点播等功能。 通过上述知识点的梳理,《AS3高手之路》不仅涵盖了AS3的基础概念和技术细节,还涉及了大量的实践经验和高级...

    网络通讯协议关系图

    网络通讯协议是现代信息技术的基础之一,它们不仅构成了网络通信的技术骨架,还为数据传输和资源共享提供了坚实的保障。通过对这些协议的深入了解和掌握,可以更好地设计和优化网络系统,满足不同应用场景的需求。

    Adobe_Flash_Media_Server_5_介绍与入门

    开发人员可以利用Adobe Media Server 5 构建自定义的视频播放器,确保跨设备的一致用户体验,同时利用服务器提供的API进行数据共享、服务器插件、日志记录和监控。 6. **术语表和在线资源** 文档中的术语表有助于...

    WowzaMediaServerPro_FMStoWowzaProAPIMapping.pdf

    LogObject提供了日志记录功能,对于调试和监控流媒体服务器的运行状态至关重要。通过日志,开发者可以追踪问题来源,优化性能,并确保系统的稳定运行。 #### NetConnectionObject NetConnectionObject负责建立和...

Global site tag (gtag.js) - Google Analytics