`
baobeituping
  • 浏览: 1068100 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

red5自学篇(5)

阅读更多

一边录像,一边看。其实这就是现在视频的真谛。red5也可以实现这个功能,代码很简单,不过写了很久。。。。。

 

 

Xml代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"    
  3.     creationComplete="init()">  
  4.     <mx:Script>  
  5.         <![CDATA[  
  6.             import mx.controls.Alert;   
  7.             private var nc:NetConnection = null;  
  8.             private var ns:NetStream = null;  
  9.             private var video:Video = null;  
  10.             private var camera:Camera = null;//定义一个摄像头   
  11.             private var mic:Microphone; //定义一个麦克风   
  12.               
  13.             private var rtmp_url:String = "rtmp://192.168.61.115/red5_app";  
  14.               
  15.             private var play_url:String = "rtmp://192.168.61.115/red5_app";  
  16.             private var nc_play:NetConnection = null;  
  17.             private var ns_play:NetStream = null;  
  18.             private var video_play:Video = null;  
  19.               
  20.             private var videoName:String = ""; //视频保存名字  
  21.               
  22.             private function init():void{  
  23.                 //nc = new NetConnection();  
  24.                 setupCameraAndMic();   
  25.             }  
  26.               
  27.             private function setupCameraAndMic():void{  
  28.                 camera = Camera.getCamera();  
  29.                 if(camera != null){  
  30.                     camera.addEventListener(StatusEvent.STATUS,cameraStatus);  
  31.                     camera.setMode(128,96,12);  
  32.                     camera.setQuality(0,100);  
  33.                     video = new Video();  
  34.                     video.width = 128;  
  35.                     video.height = 96;  
  36.                     video.attachCamera(camera);  
  37.                     recordVideo.addChild(video);  
  38.                 }  
  39.                 mic = Microphone.getMicrophone();   
  40.                 if(mic != null){   
  41.                     mic.addEventListener(StatusEvent.STATUS,micStatus);  
  42.                     mic.setSilenceLevel(0,-1); //设置麦克风保持活动状态并持续接收集音频数据   
  43.                     mic.gain = 80; //设置麦克风声音大小   
  44.                 }   
  45.             }  
  46.               
  47.             private function cameraStatus(event:StatusEvent):void{  
  48.                 if(!camera.muted){  
  49.                     begin.enabled = true;  
  50.                     //error_label.text = error_label.text + "1";  
  51.                 }else{  
  52.                     //error_label.text = error_label.text + "  无法找到摄像头"  
  53.                 }  
  54.                 //camera.removeEventListener(StatusEvent.STATUS,cameraStatus);  
  55.             }  
  56.               
  57.             /* 好像麦克风没法检测,测试过拔掉麦克风,但是没效果 */  
  58.             private function micStatus(event:StatusEvent):void{  
  59.                 if(!mic.muted){  
  60.                     begin.enabled = true;  
  61.                     //error_label.text = error_label.text + "2";  
  62.                 }else{  
  63.                     //error_label.text = error_label.text + "  无法找到麦克风";  
  64.                 }  
  65.                 //mic.removeEventListener(StatusEvent.STATUS,micStatus);  
  66.             }  
  67.               
  68.             /*点击 开始录像 按钮*/  
  69.             private function clickStartRecord():void{  
  70.                 nc = new NetConnection();  
  71.                 nc.addEventListener(NetStatusEvent.NET_STATUS,nsHandler);  
  72.                 nc.connect(rtmp_url); //连接red5  
  73.                 //doRecord();  
  74.                               
  75.             }  
  76.               
  77.             private function nsHandler(evt:NetStatusEvent):void{  
  78.                 if(evt.info.code == "NetConnection.Connect.Success"){ //如果连接成功  
  79.                     //error_text.text = evt.info.code;  
  80.                     doRecord();  
  81.                 }else{  
  82.                     Alert.show("连接失败");  
  83.                 }  
  84.             }  
  85.               
  86.             /*开始录像*/  
  87.             private function doRecord():void{  
  88.                 if(video != null){  
  89.                     video.clear();  
  90.                     recordVideo.removeChild(video);  
  91.                     video = new Video();  
  92.                     video.width = 128;  
  93.                     video.height = 96;  
  94.                     video.attachCamera(camera);  
  95.                     recordVideo.addChild(video);  
  96.                 }  
  97.                 ns = new NetStream(nc);  
  98.                 ns.attachCamera(camera);  
  99.                 ns.attachAudio(mic);  
  100.                 videoName = "vincent_"+Math.random()+getTimer();  
  101.                 ns.publish(videoName,"record");  
  102.                 begin.enabled = false;  
  103.                 end.enabled = true;  
  104.                 doPlay();     
  105.             }  
  106.               
  107.             function doPlay():void{  
  108.                 nc_play = new NetConnection();  
  109.                 nc_play.addEventListener(NetStatusEvent.NET_STATUS,ncPlayHandler);  
  110.                 nc_play.connect(play_url);  
  111.                   
  112.                 //playVideo.source = play_url+videoName+".flv";  
  113.                 //error_text.text = ;  
  114.             }  
  115.               
  116.               
  117.             private function ncPlayHandler(evt:NetStatusEvent):void{  
  118.                 if(evt.info.code == "NetConnection.Connect.Success"){ //如果连接成功  
  119.                     error_text.text = evt.info.code;  
  120.                     //error_text.text = "4"  
  121.                     ns_play = new NetStream(nc_play);  
  122.                     /*这里我曾经迷惑了很久,记得这个videoName是不带flv后缀的,如果带了那就是不行了*/  
  123.                     ns_play.play(videoName);   
  124.                     //error_text.text = "5"  
  125.                     video_play = new Video();  
  126.                     video_play.width = 320;  
  127.                     video_play.height = 240;  
  128.                     video_play.attachNetStream(ns_play);  
  129.                     playVideo.addChild(video_play);  
  130.                     //error_text.text = "6"  
  131.                 }else{  
  132.                     Alert.show("连接失败");  
  133.                 }  
  134.             }  
  135.               
  136.             private function clickend():void{  
  137.                 ns.close();  
  138.                 //nc.close();  
  139.                 video.clear();  
  140.                 ns_play.close();  
  141.                 //nc_play.close();  
  142.                 video_play.clear();  
  143.                 recordVideo.removeChild(video);  
  144.                 begin.enabled = true;  
  145.                 end.enabled = false;  
  146.                   
  147.                 init();/*重新初始化Camera,否则Camera会默认使用完了,不再显示图像*/  
  148.             }  
  149.         ]]>  
  150.     </mx:Script>  
  151.     <mx:Panel x="264" y="362" width="167" height="157.6" layout="absolute">  
  152.         <mx:VideoDisplay x="9" y="10" width="128" height="96" id="recordVideo"/>  
  153.     </mx:Panel>  
  154.     <mx:Button x="73" y="495.6" enabled="false" label="开始视频" fontSize="12" id="begin"    
  155.         click="clickStartRecord()"/>  
  156.     <mx:Button x="178" y="495.6" enabled="false" label="结束视频" fontSize="12" id="end"    
  157.         click="clickend()"/>  
  158.     <mx:Panel x="73" y="47" width="358" height="307" layout="absolute">  
  159.         <mx:VideoDisplay x="9" y="10" width="320" height="240" id="playVideo"/>  
  160.     </mx:Panel>  
  161.     <mx:Text x="73" y="372" id="error_text" text="Text" width="183" height="53.6"/>  
  162.     <!--   
  163.     <mx:TextInput x="73" y="433" id="playName" fontSize="12"/>  
  164.     <mx:Button x="73" y="463" label="播放" id="playButton" fontSize="12" click="doPlay();"/>  
  165.     -->  
  166. </mx:Application>  
分享到:
评论

相关推荐

    自学卡四下U5breadandwrite.docx

    这篇文档是针对四年级下册英语学习的一份自学卡,主要涵盖了第五单元 "bread and write" 的内容。这个单元的重点是学习与衣物相关的词汇和句型,以及掌握正确的书写规范。 1. 单词和短语的学习:文档列出了一系列...

    鸟哥的私房菜 基础篇 第三版

    9. **软件包管理**:介绍不同Linux发行版的软件包管理系统,如Red Hat的yum和Debian的apt,以及如何安装、更新和卸载软件。 10. **系统监控与维护**:讲述如何查看系统状态,进行性能分析,以及日常的系统维护工作...

    网管员必读网络管理 pdg

    后5章介绍的是Red Hat Enterprise Linux Advanced Server 4系统中的各种安装方式、基本网络属性配置、网络连接的创建与配置、用户和组群管理、文件系统管理、磁盘系统管理、DNS/DHCP/Apache HTTP服务器配置、RPM和...

    LUNIX系统学习书

    1. **操作系统**:Red Hat Linux 9.0或更高版本。 2. **手机**:支持CDMA 1X的手机,如文中提到的X339等型号。 3. **USB数据线**:用于连接手机和电脑的数据线。 #### 三、准备工作 确保手机支持CDMA 1X并能够通过...

    C语言初阶-手把手教零基础新手入门(万字心得笔记)-c语言入门自学零基础

    enum colors {red, green, blue}; ``` #### 四、字符串&&转义字符 ##### 4.1 字符串 字符串是由多个字符组成的序列。在C语言中,字符串通常表示为字符数组,结尾处包含一个空字符`\0`。例如: ```c char str[] ...

    “我与Linux的故事”征文选登有你不再孤单.pdf

    《我与Linux的故事》这篇征文不仅记录了作者个人与Linux的不解之缘,更是展现了整个Linux社区的精神面貌。Linux的出现和普及,不仅仅是一个技术现象,更是一种文化现象。它代表了一种对知识的渴望、对技术的热爱和对...

    湘少版三年级英语下册第三四单元期末复习试卷精选.doc

    这篇文档是针对湘少版三年级英语下册第三四单元的期末复习资料,旨在帮助学生巩固和测试这两个单元的重要词汇和句子。复习的重点集中在颜色和衣物相关的词汇,以及询问颜色和确认物品归属的句型。 在第三单元中,...

    sight+s+表格+例句版.doc

    这篇文档标题为 "sight+s+表格+例句版.doc",显然是一份用于学习英语词汇和句型的材料,特别关注的是简单的单词(sight words)和它们在句子中的应用。这些单词通常是儿童早期阅读时最常遇到的,因此学习它们能帮助...

    c及linux基础培训笔记--超详细

    这篇笔记涵盖了C语言和Linux基础,适合初学者和自学者。笔记主要分为以下几个知识点: 1. **Linux硬盘分区**: - 主分区和扩展分区的总数不超过4个,其中扩展分区最多1个。 - 逻辑分区从5开始,理论上没有数量...

    Python完全新手教程(1).doc

    【Python完全新手教程】这篇文档是为初学者准备的Python编程入门指南,由作者taowen和billrice编写。教程分为几个课时,首先讲解如何准备学习Python的环境。 在【 Lesson 1】中,作者提供了Python的下载地址,并...

    斑码教育大前端课堂笔记-css第一天

    本篇笔记是斑码教育sy101课程的第一天内容,主要围绕CSS(Cascading Style Sheets)展开,旨在帮助初学者系统地理解并掌握网页样式设计的基础知识。 一、CSS简介 CSS,即层叠样式表,是用于控制网页元素样式的一种...

    山西省灵石县第二中学七年级英语上册 Unit 1 My name’s Gina period 2学案(无答案)(新版)人教新目标版

    这篇资料是针对七年级英语上册 Unit 1 My name’s Gina period 2的学习方案,主要适用于山西省灵石县第二中学的新版人教新目标版教材。这个单元主要围绕自我介绍、互相问候以及询问第三方姓名展开。 学习内容包含了...

    广东省惠州市惠东县2017_2018学年九年级英语全册Unit4Iusedtobeafraidofthedark背诵卷新版人教新

    这篇资料主要涵盖了初中英语Unit4“I used to be afraid of the dark”的核心词汇和表达,这个单元主要探讨了过去的行为和习惯以及个人的变化。以下是详细的知识点解析: 1. **过去常常做某事**:used to do sth. ...

Global site tag (gtag.js) - Google Analytics