不好意思,让大家久等了!今天我要实现的一个功能是异步录像!先讲下为什么要提出这样一个问题----假设被监控区域出现了异常(一个陌生人进入),那么本监控系统就要对这一段时间发生的一切进行录制,但此同时我们又在另一端观测这一段时间的实时视频,如何才能做到这一点-----既能录像又不打断我们观测实时视频?
解决原理:我们可以制作发布两个视频流,一个视频流的作用仍然是我们上篇文章所讲到的“把实时视频流传送到FMS服务器”,另外一个视频流的作用则是播放此实时视频流,假如发生异常则利用此视频流进行录像,这样就解决了第一段落提出的问题。 下面的代码可以覆盖上篇文章提到的server.mxml
<?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 ;
conne.connect("rtmp://127.0.0.1/example") ;
conne.addEventListener(NetStatusEvent.NET_STATUS,chuli) ;
}
private var nnnns:NetStream = null ;//专门用来向连接到服务器的客户端提供共享视频流
private var nnnnns: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端的视频流(实时视频流,供client端播放)
nnnns.publish("wwww","live") ;
nnnnns = new NetStream(conne) ;
nnnnns.attachAudio(Microphone.getMicrophone()) ;
nnnnns.attachCamera(Camera.getCamera()) ;
time = new Date().getTime().toString() ;
nnnnns.publish(time,"live") ;//记录当前时间,以此作为标志位,发布到FMS
nnnnns.addEventListener(NetStatusEvent.NET_STATUS,netStreamHandler) ;
break;
case "NetStream.Play.StreamNotFound":
Alert.show("失败") ;
break;
default :
Alert.show("缺省") ;
break ;
}
}
//停止播放
private function tingzhi():void {
nnnns.close() ;
nnnnns.close() ;
conne.close() ;
}
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("1199001232984") ;
}
private function luxiang():void {
time = new Date().getTime().toString() ;
nnnnns.publish(time,"record") ;
}
//停止录像
private function stopLuxiang():void {
nnnnns.close() ;
}
//NetStream事件处理器
private function netStreamHandler(e:NetStatusEvent):void {
var s:String = e.info.code ;
switch(s) {//停止录像时,再记录当前时间,并以此为标志位,发不到FMS
case "NetStream.Record.Stop" :
nnnnns = new NetStream(conne) ;
nnnnns.attachAudio(Microphone.getMicrophone()) ;
nnnnns.attachCamera(Camera.getCamera()) ;
time = new Date().getTime().toString() ;
nnnnns.publish(time,"live") ;
break ;
}
}
//拍照功能实现
private function paizhao():void {
var bmp:BitmapData = new BitmapData(vd.width,vd.height,true,0) ;
bmp.draw(vd) ;
var bitMap:Bitmap = new Bitmap(bmp) ;
image.source = bitMap ;
}
]]>
</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:Button x="458" y="247" label="播放" click="bofang()"/>
<mx:Button x="302" y="247" label="开始录像" click="luxiang()"/>
<mx:Button x="380" y="247" label="停止录像" click="stopLuxiang()"/>
<mx:Button x="229" y="247" label="拍照" click="paizhao()"/>
<mx:Image x="45" y="314" width="264" height="213" id="image"/>
</mx:Application>
请大家注意看下,写注释的地方,那些是本篇文章的核心!(因为代码比较多,因此本人大致做了些删改),有什么不明白的可以留言,本人将会为大家解答!
下篇文章就是本视频监控软件最核心的地方----图像识别,至今为止,本人仍在探寻较为高效的算法。哪位兄弟对此方面的图像识别算法有研究,可以共同交流下!
分享到:
相关推荐
android录音上传到服务器,上传使用AsyncTask异步任务.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Socket异步服务器,可以监控客户端的状态,功能有,文字测试,服务端向客户端传输屏幕录像(UDP传输)、监控客户端屏幕(UDP传输),抖动用户窗体、发送文件给用户、扫描客户的C盘目录。
DSSClient大华综合管理平台\DSSClient电脑版本客户端软件20180904,全新一代的综合视频监控系统,提供视频相关操作的界面展示支持,实时视频录像查询播放报警预案,视频轮巡及语音对讲等功能, 最大支持36路,同时...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
[2]异步选择 - WSAAsyncSelect [3]---事件选择 - WSAEventSelect [4]---重叠I [5]---完成端口 IP所在地查询器 如题。 jpeglib_demo 处理Jpeg图片。 KeyHook 键盘钩子,截获键盘信息。 Kugou7+UI 界面设计。学习...
Ajax-FaceNet-based-Attendance-System.zip,基于深度学习的网络应用程序,通过从课堂监控录像中识别学生的面部来标记学生的出勤率。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml...
请善用本地播放器开播,录像气泡提示B站,油管多线程异步直播缓存(至多512个,达到这个数量前一般网络先会受不了)B站主站视频下载直播弹幕记录直播弹幕发送功能暂时还没想到其他的需求,欢迎提供关于监控列表因为我...
CODO是一款为用户提供企业多混合云、一站式...CODO开源多云管理平台将为用户提供多功能:ITSM、基于RBAC权限系统、Web Terminnal登陆日志审计、录像回放、强大的作业调度系统、CMDB、监控报警系统、DNS管理、配置中心等
CODO开源多云管理平台为用户提供多功能:ITSM、基于RBAC权限系统、Web Terminnal登陆日志审计、录像回放、强大的作业调度系统、CMDB、监控报警系统等 众多功能模块我们一直在不停的调研和开发,如果你对此项目感...
1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...
1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...
现在的会议室、电化教学室等,已经 不是以前的一张讲台一张椅子一个话筒了,取而代之的是各种先进的多媒体会议及教学 设备,如:投影机、影碟机、录像机、视频展示台、多媒体电脑、电动屏幕。一些大型 会议室还配备...
1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...
1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6...