宜昌本地软件开发与弱电工程服务商
项目咨询 · 快速响应

[AS3]as3处理FMS的视频录像(代码实例)

2016-10-13 00:16:48 点击量:18 标签: 收藏本文

[AS3]as3处理FMS的视频录像(代码实例)

  1. var mic:Microphone = Microphone.getMicrophone(); 
  2. mic.setUseEchoSuppression(true); 
  3. mic.setLoopBack(true); 
  4.  
  5. //但那只是得到MIC的声音流并回放到音箱上,音频数据是没法得到的~~  
  6. //如果不用NetConnection和NetStream的话  
  7.  
  8. //极酷播放器提示:下面是使用FMS保存录像 
  9. var server_uri:String = "rtmp://localhost/test"; 
  10. //FMS地址;  
  11. var videoName:String = "KeeRula"; 
  12. //视频名.  
  13. var my_nc:NetConnection = new NetConnection(); 
  14. //新建一个连接对象,用来连接FMS;  
  15. my_nc.connect(server_uri); 
  16. //连接FMS;  
  17. var my_ns:NetStream = new NetStream(my_nc); 
  18. //新建流,用来捕获和播放视频;  
  19. var my_cam:Camera = Camera.get(1); 
  20. video_r.attachVideo(my_cam); 
  21. //获得慑像头,并将摄像头获取的视频载入到video_r里.  
  22. my_cam.setQuality(1024, 90); 
  23. //设置带宽和质量;  
  24. var my_mic:Microphone = Microphone.get(); 
  25. //获得MIC;  
  26. my_ns.attachVideo(my_cam); 
  27. my_ns.attachAudio(my_mic); 
  28. //将摄像头图象和MIC声音装载到流.  
  29. video_p._visible = false; 
  30. //将播放窗口设置为不可见.  
  31. my_nc.onStatus = function(thisObj:Object) 
  32. { 
  33.     //trace (thisObj.code);  
  34.     if (thisObj.code == "NetConnection.Connect.Success") 
  35.     { 
  36.         RecordStop("空闲中"); 
  37.         //执行录制停止方法.并将状态设置为空闲  
  38.     } 
  39.     else 
  40.     { 
  41.         trace("错误:服务器未启动或URI输入错误."); 
  42.     } 
  43. }; 
  44.  
  45. //onStatus这里是指服务器的连接状态.  
  46. function Record() 
  47. { 
  48.     video_r._visible = true; 
  49.     //将录制窗口设为可见.  
  50.     video_p._visible = false; 
  51.     //播放窗口设置为不可见.  
  52.     my_ns.publish(videoName, "record"); 
  53.     //关键就在这句了.写了这么多全围绕它来的.record为录制.  
  54.     StreamInfo("NowRecord"); 
  55.     //执行StreamInfo方法,并将参数设置为NowRecord;  
  56.     btn_pr.btn_text.text = "停止"; 
  57.     //按钮文字:停止.  
  58.     RecordInterval = setInterval(RecordTime, 1000); 
  59.     //统计录制时间.  
  60. } 
  61. Record() 
  62. //方法:录制.  
  63.  
  64. var timeNum:Number = 0; 
  65. //录制时间.  
  66. function RecordTime() 
  67. { 
  68.     timeNum++; 
  69.     txt_status.text = "正在录制" + " " + "时间:" + Math.floor(timeNum / 60) + "分" + (timeNum % 60) + "秒"; 
  70. } 
  71.  
  72. //方法:录制时间统计.  
  73. function RecordStop(__status:String) 
  74. { 
  75.     //__status是当前状态文字.  
  76.     txt_status.text = "当前状态:" + __status; 
  77.     btn_pr.btn_text.text = "录制"; 
  78.     StreamInfo("NowStop"); 
  79.     //执行StreamInfo方法..并将参数设置为NowStop;  
  80.     clearInterval(RecordInterval); 
  81.     timeNum = 0; 
  82.     //不录了..要把统计时间清空.  
  83.     if (__status == "录制完成") 
  84.     { 
  85.         Finished(); 
  86.     } 
  87.     //这个应该不用偶说了..      
  88. } 
  89.  
  90. //方法:空闲或录制完成.  
  91.  
  92. function Finished() 
  93. { 
  94.     my_ns.close(); 
  95.     //完成了..就要关闭录制.  
  96.     var thisthisObj = this; 
  97.     var FinishAlert:MovieClip = _root.attachMovie("Alert", "FinishAlert", 100); 
  98.     //这个是一个弹出框.具体看库里的MC:Alert.  
  99.     with (FinishAlert) 
  100.     { 
  101.         alertTitle.HTML = true; 
  102.         alertTitle.HTMLText = "" + "录制完成!" + ""; 
  103.         info.text = "录制完成..请选择下一步操作."; 
  104.         _x = video_r._x + (video_r._width - _width) / 2; 
  105.         _y = video_r._y + (video_r._height - _height) / 2; 
  106.         btn_sub.btn_txt.text = "播放"; 
  107.         btn_cln.btn_txt.text = "重录"; 
  108.         btn_sub.onRelease = function() 
  109.         { 
  110.             thisObj.PlayVideo(); 
  111.             thisObj.closeAlert(FinishAlert); 
  112.         }; 
  113.         btn_cln.onRelease = function() 
  114.         { 
  115.             thisObj.Record(); 
  116.             thisObj.closeAlert(FinishAlert); 
  117.         }; 
  118.         closed.onRelease = function() 
  119.         { 
  120.             thisObj.closeAlert(FinishAlert); 
  121.         }; 
  122.     } 
  123.     btn_pr.enabled = false; 
  124.     //把按钮设为不可点.  
  125. } 
  126.  
  127. //方法:录制完成.  
  128.  
  129. function closeAlert(__alert:MovieClip) 
  130. { 
  131.     btn_pr.enabled = true; 
  132.     unloadMovie(__alert); 
  133. } 
  134.  
  135. //关闭那个Alert用的.  
  136. function StreamInfo(__status:String) 
  137. { 
  138.     btn_pr.onRelease = function() 
  139.     { 
  140.         if (__status == "NowRecord") 
  141.         { 
  142.             RecordStop("录制完成"); 
  143.         } 
  144.         else if (__status == "NowStop") 
  145.         { 
  146.             Record(); 
  147.         } 
  148.         else if (__status == "NowPlay") 
  149.         { 
  150.             Record(); 
  151.         } 
  152.     }; 
  153. } 
  154.  
  155. //嘿嘿..如果把上面的仔细看了的话这个就不用我说了吧.^_^  
  156.  
  157. function PlayVideo() 
  158. { 
  159.     txt_status.text = "当前状态:" + "正在播放..."; 
  160.     StreamInfo("NowPlay"); 
  161.     video_r._visible = false; 
  162.     video_p._visible = true; 
  163.     video_p.attachVideo(my_ns); 
  164.     //将视频载到播放窗口中.  
  165.     my_ns.play(videoName); 
  166.     //开始播放.  
  167.     btn_pr.btn_text.text = "重录"; 
  168.     my_ns.onStatus = function(PlayInfo) 
  169.     { 
  170.         if (PlayInfo.code == "NetStream.Play.Stop") 
  171.         { 
  172.             my_ns.seek(0); 
  173.             my_ns.pause(); 
  174.             txt_status.text = "当前状态:" + "播放完成..."; 
  175.         } 
  176.     }; 
  177.     //流状态信息...详细的请自己 trace (PlayInfo.code);  
  178. }