[代码]Flex结合FMS3在线录制视频

baacloud免费翻墙vpn注册使用

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

1. <?xml version="1.0" encoding="utf-8"?>
2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();">
3. <mx:Script>
4. <!&#91;CDATA&#91;
5. import mx.messaging.errors.NoChannelAvailableError;
6. private var nc:NetConnection;
7. private var ns:NetStream;
8. private var rtmpNow:String;
9. private var msg:Boolean;
10. private var metaSniffer:Object;
11. private var dur:Number;
12. private var cam:Camera;
13. private var mic:Microphone;
14. private var vid1:Video;
15.
16. private function initApp():void{
17. //初始化一个网络连接
18. nc=new NetConnection();
19. //为这个连接添加事件,这个事件有返回连接状态
20. nc.addEventListener(NetStatusEvent.NET_STATUS,checkConnect);
21. //这是连接的地址其实就是在你FMS的安装目录里,Applications下新建一个vid2的文件夹,这个文件夹可以看成是你的工程名了
22. //至于后面的recordings是你录制视频时存放视频的文件夹
23. rtmpNow="rtmp://localhost/vid2/recordings";
24. //开始连接
25. nc.connect(rtmpNow);
26. addMedia();
27. }
28.
29. private function checkConnect(event:NetStatusEvent):void{
30. //根据连接返回的状态信息判断是滞连接成功
31. msg=(event.info.code=="NetConnection.Connect.Success");
32. msgError.text=event.info.code;
33. if(msg){
34. //如果成功,就利用些连接建立一个流,为以后的录制传输数据
35. ns=new NetStream(nc);
36. msgError.text="establish netStream";
37. }
38. }
39.
40. private function startRecord(e:Event):void{
41. if(ns){
42.
43. msgError.text="start record";
44. //开始录制时要加载micphone和摄像头
45. ns.attachAudio(mic);
46. ns.attachCamera(cam);
47. //这里是关键,从这里开始,就开始录制了,input.text是录制的视频文件的名称
48. ns.publish(input.text,"record");
49. }
50. }
51.
52. private function stop(event:Event):void{
53. //和JAVA里类似,流类的东西一定要记得关闭
54. ns.play(false);
55. ns.close();
56. msgError.text="stop";
57. }
58.
59. private function addMedia ():void
60. {
61. //获取系统的摄像头
62. cam=Camera.getCamera();
63. //设定宽,高,以及帧
64. cam.setMode (240,180,24);
65. //设定画面质量
66. cam.setQuality (0,90);
67. //获取系统的microphone
68. mic=Microphone.getMicrophone();
69. //让videoDisplay加载摄像头
70. vv.attachCamera(cam);
71. msgError.text="initnize";
72. }
73.
74.
75. &#93;&#93;>
76. </mx:Script>
77.
78. <mx:VBox id="myVb">
79. <mx:VideoDisplay id="vv" width="400" height="300"/>
80. <mx:Button label="record" id="btn" click="startRecord(event);"/>
81. <mx:Button label="play" id="stopbtn" click="stop(event);"/>
82. <mx:TextInput id="input"/>
83. <mx:TextArea id="msgError" backgroundColor="red"/>
84. </mx:VBox>
85. </mx:Application>
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏