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

FLEX 结合FMS在线录制FLV视频

发布时间:2020-12-15 04:47:19 所属栏目:百科 来源:网络整理
导读:以前一直以为录制视频是一件很麻烦的事情,这两天忙中偷闲研究了下FMS,没想到利用FMS和FLEX一切来得这么简单,刚研究这DD,一些内部机制都没能理解得很通透,如果那里说得不够准确或有误,欢迎大家拍砖,先说说它的原理:FLEX利用RTMP协议来与FMS也就是服务端取得连

以前一直以为录制视频是一件很麻烦的事情,这两天忙中偷闲研究了下FMS,没想到利用FMS和FLEX一切来得这么简单,刚研究这DD,一些内部机制都没能理解得很通透,如果那里说得不够准确或有误,欢迎大家拍砖,先说说它的原理:FLEX利用RTMP协议来与FMS也就是服务端取得连接,RTMP与HTTP的最大不同之处在于,RTMP是一个有状态的协议,它不仅可以一直与客户端保持连接,而且可以监控客户端的行为并主动与之交互,而HTTP则是一个无状态的协议,当客户端主动发出请求,服务端响应完毕后,一次会话过程序就结束了.而在FLEX中,主要用到了NetConnection和NetStream类,有过编程经验的朋友一眼就能看出来这两个家伙是干嘛的吧.小弟就不多说了.

?

<?xml version="1.0" encoding="utf-8"?>?
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();">?
<mx:Script>?
<![CDATA[?
import mx.messaging.errors.NoChannelAvailableError;?
private var nc:NetConnection;?
private var ns:NetStream;?
private var rtmpNow:String;?
private var msg:Boolean;?
private var metaSniffer:Object;?
private var dur:Number;?
private var cam:Camera;?
private var mic:Microphone;?
private var vid1:Video;

private function initApp():void{?
//初始化一个网络连接?
nc=new NetConnection();?
//为这个连接添加事件,这个事件有返回连接状态?
nc.addEventListener(NetStatusEvent.NET_STATUS,checkConnect);?
//这是连接的地址其实就是在你FMS的安装目录里,Applications下新建一个vid2的文件夹,这个文件夹可以看成是你的工程名了?
//至于后面的recordings是你录制视频时存放视频的文件夹?
rtmpNow="rtmp://localhost/vid2/recordings";?
//开始连接?
nc.connect(rtmpNow);?
addMedia();?
}

private function checkConnect(event:NetStatusEvent):void{?
//根据连接返回的状态信息判断是滞连接成功?
msg=(event.info.code=="NetConnection.Connect.Success");?
msgError.text=event.info.code;?
if(msg){?
//如果成功,就利用些连接建立一个流,为以后的录制传输数据?
ns=new NetStream(nc);?
msgError.text="establish netStream";?
}?
}

private function startRecord(e:Event):void{?
if(ns){

msgError.text="start record";?
//开始录制时要加载micphone和摄像头?
ns.attachAudio(mic);?
ns.attachCamera(cam);?
//这里是关键,从这里开始,就开始录制了,input.text是录制的视频文件的名称?
ns.publish(input.text,"record");?
}?
}

private function stop(event:Event):void{?
//和JAVA里类似,流类的东西一定要记得关闭?
ns.play(false);?
ns.close();?
msgError.text="stop";?
}

private function addMedia ():void?
{?
//获取系统的摄像头?
cam=Camera.getCamera();?
//设定宽,高,以及帧?
cam.setMode (240,180,24);?
//设定画面质量?
cam.setQuality (0,90);?
//获取系统的microphone?
mic=Microphone.getMicrophone();?
//让videoDisplay加载摄像头?
vv.attachCamera(cam);?
msgError.text="initnize";?
}


]]>?
</mx:Script>

<mx:VBox id="myVb">? <mx:VideoDisplay id="vv" width="400" height="300"/>? <mx:Button label="record" id="btn" click="startRecord(event);"/>? <mx:Button label="play" id="stopbtn" click="stop(event);"/>? <mx:TextInput id="input"/>? <mx:TextArea id="msgError" backgroundColor="red"/>? </mx:VBox>? </mx:Application>

(编辑:李大同)

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

    推荐文章
      热点阅读