`
xiaoshan5634
  • 浏览: 74121 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

使用red5录像

阅读更多

Red5是一个采用Java开发开源的Flash流媒体服务器。它支持:把音频(MP3)和视频(FLV)转换成播放流; 录制客户端播放流(只支持FLV);共享对象;现场直播流发布;远程调用。Red5使用RSTP作为流媒体传输协议,在其自带的一些示例中演示了在线录 制,flash流媒体播放,在线聊天,视频会议等一些基本功能。

Red5 is an Open Source Flash Server written in Java that supports:

  • Streaming Audio/Video (FLV and MP3 )
  • Recording Client Streams (FLV only)
  • Shared Objects
  • Live Stream Publishing
  • Remoting (AMF )
到http://www.red5.org/red5-server/下载最新的red5版本(我下的是linux版),只需要解压缩unzip -o red5-1.0.0-RC1.zip,然后执行./red5.sh即可将red5的服务启动起来。
访问http://localhost:5080,然后安装相应的服务,之后就可以查看demo了。
新建一web项目TestRed5,然后将WebRoot部分拷贝直red5的webapps目录下,补充好相应red5-web.properties和red5-web.xml还有web.xml文件,可以直接拷贝oflaDemo中的三个文件。然后重启red5服务,就可以访问TestRed5提供的red5服务了。

使用red5+flash提供视频录像和播放录像的主要功能是由red5提供录和播放的功能,使用flex制作一个flash
代码如下:
<?xml version="1.0" encoding="utf-8"?>  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"   
				creationComplete="init()">  
	<mx:Script>   
		<![CDATA[  
			import mx.controls.Alert;  
			private var nc:NetConnection = null; 
			private var ns:NetStream = null; 
			private var video:Video = null; 
			private var camera:Camera = null;//定义一个摄像头  
			private var mic:Microphone; //定义一个麦克风  
			
			private var rtmp_url:String = "";// "rtmp://192.168.61.113/TestRed5"; 
			private var videoName:String = ""; //视频保存名字 
			
			private function init():void{ 
				//nc = new NetConnection(); 
				setupCameraAndMic(); 
			} 
			
			private function setupCameraAndMic():void{ 
				camera = Camera.getCamera(); 
				if(camera != null){ 
					camera.addEventListener(StatusEvent.STATUS,cameraStatus); 
					camera.setMode(320,240,30); 
					camera.setQuality(0,70); 
					video = new Video(); 
					video.width = 320; 
					video.height = 240; 
					video.attachCamera(camera); 
					videoPlay.addChild(video); 
				} 
				mic = Microphone.getMicrophone();  
				if(mic != null){  
					mic.addEventListener(StatusEvent.STATUS,micStatus); 
					mic.setSilenceLevel(0,-1); //设置麦克风保持活动状态并持续接收集音频数据  
					mic.gain = 80; //设置麦克风声音大小  
				}  
			} 
			
			private function cameraStatus(event:StatusEvent):void{ 
				if(!camera.muted){ 
					startRecord.enabled = true; 
					//error_label.text = error_label.text + "1"; 
				}else{ 
					error_label.text = error_label.text + "  无法找到摄像头" 
				} 
				//camera.removeEventListener(StatusEvent.STATUS,cameraStatus); 
			} 
			
			/* 好像麦克风没法检测,测试过拔掉麦克风,但是没效果 */ 
			private function micStatus(event:StatusEvent):void{ 
				if(!mic.muted){ 
					startRecord.enabled = true; 
					//error_label.text = error_label.text + "2"; 
				}else{ 
					error_label.text = error_label.text + "  无法找到麦克风"; 
				} 
				//mic.removeEventListener(StatusEvent.STATUS,micStatus); 
			} 
			
			/*点击 开始录像 按钮*/ 
			private function clickStartRecord():void{ 
				
				nc = new NetConnection(); 
				nc.addEventListener(NetStatusEvent.NET_STATUS,nsHandler); 
				var name : String = root.loaderInfo.parameters.name; --从外界出入的参数
				//rtmp_url = "rtmp://192.168.61.113/TestRed5";
				rtmp_url = "rtmp://" + name + "/TestRed5";
				error_label.text=rtmp_url + name;
				//error_label.text=rtmp_url + name; 
				nc.connect(rtmp_url); //连接red5 
				//doStart(); 
			} 
			
			private function nsHandler(evt:NetStatusEvent):void{ 
				if(evt.info.code == "NetConnection.Connect.Success"){ //如果连接成功 
					doStart(); 
				}else{ 
					Alert.show("连接失败"); 
				} 
			} 
			
			/*开始录像*/ 
			private function doStart():void{ 
				if(video != null){ 
					video.clear(); 
					videoPlay.removeChild(video); 
					video = new Video(); 
					video.width = 320; 
					video.height = 240; 
					video.attachCamera(camera); 
					videoPlay.addChild(video); 
				} 
				ns = new NetStream(nc); 
				ns.attachCamera(camera); 
				ns.attachAudio(mic); 
				videoName = "vincent_"+Math.random()+getTimer(); 
				ns.publish(videoName,"record"); 
				startRecord.enabled = false; 
				stopRecord.enabled = true; 
			} 
			
			private function clickStopRecord():void{ 
				ns.close(); 
				video.clear(); 
				videoPlay.removeChild(video); 
				startRecord.enabled = true; 
				stopRecord.enabled = false; 
				init();/*重新初始化Camera,否则Camera会默认使用完了,不再显示图像*/ 
			} 
		]]>   
	</mx:Script>   
	<mx:Panel x="213" y="175" width="360.5" height="301" layout="absolute">  
		<mx:VideoDisplay x="10" y="10" width="320" height="240" id="videoPlay"/>  
	</mx:Panel>  
	<mx:Button x="270" y="498" label="开始录像" id="startRecord"   
			   click="clickStartRecord()"/>  
	<mx:Button x="432" y="498" label="停止录像" id="stopRecord"   
			   click="clickStopRecord()" enabled="false"/>  
	<!-- 
	<mx:Button x="442" y="498" label="播放录像" id="playRecord" enabled="false"/> 
	-->  
	<mx:Label text="错误:" x="213" y="544" width="360.5" height="25"   
			  id="error_label" fontSize="12"/>  
	
</mx:Application>  
 将此mxml导出成videoRecorder2.swf文件,供web程序使用,此程序提供一个录像功能。

将videoRecorder2.swf嵌入web页面使用,将videoRecord2.swf导入项目中。
页面代码如下
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<html>
  <head>
    <title>视频录像</title>
  </head>
  <body>
    <center>
    	<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
                codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"
                width="400" height="350" id="myFlash">

            <param name="movie" value="videoRecorder2.swf"/>
            <param name="quality" value="high"/>
            <param name="flashvars" value="name=192.168.61.113" /> --传参数给flash

            <embed src="videoRecorder2.swf" quality="high" width="400" height="350" type="application/x-shockwave-flash"
                   pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" 
                   name="myFlash" swLiveConnect="true"
                   flashvars="name=192.168.61.113"
                   />
        </object>
        <br/>
        <font color="red">温馨提示:在进行正式视频录像前,请先录制一小段视频<br/>以测试各种设备(特别是麦克风)是否能工作正常。</font>
    </center>
  </body>
</html>
 启动相关服务,访问相关页面即可进行视频录像了。


分享到:
评论
1 楼 tancai0118 2011-12-08  
很详细···很好哦···强力支持你

相关推荐

    基于Red5的录音录像方法和代码

    通过对Red5的基本概念、录音录像原理以及具体实现细节的讲解,可以帮助读者快速掌握Red5的使用方法。此外,还提供了Flash客户端与Red5服务器之间的交互方式,以便开发者能够更灵活地集成音视频功能。

    red5应用程序实例

    Red5支持RTSP,意味着它可以与多种支持该协议的设备和软件进行交互,如IP摄像头或数字视频录像机。 8. **系统架构与部署** 实例中的Red5应用程序可能涉及服务器端的配置、数据库集成以及负载均衡等高级话题。理解...

    流媒体服务器Red5的扩展设计、测试与优化

    Red5是一个开源的流媒体服务器平台,使用Java语言编写,主要用于支持Flash流媒体的实时通信和数据传递。它不仅可以传输音频和视频内容,还可以用于直播、录像以及交互式应用程序等场景。 扩展设计方面,为了适应...

    使用flowplayer播放视频录像

    如果我们要在Flowplayer中播放由Red5服务器提供的录像,我们需要确保Flowplayer支持RTMP协议,并正确配置流的URL。例如: ```javascript flowplayer("#player", { rtmp: { server: "rtmp://your.red5.server....

    red5配置文章中提到的一些软件等资源

    关于RED5配置说明文件中提到的一些资源以及视频文件,列表如下: oflaDemo.rar red5chat_v2.2_Freedevelopment.net.zip setup-Red5-0.8.0.exe 关于访问等的视频录像说明.exe

    Red5+Android 直播系统的架构服务端的直播流工程.rar

    在构建一个基于Red5和Android的直播系统时,我们需要理解几个关键知识点,这些知识点涵盖了从服务端架构到客户端实现的全过程。以下是对这个直播系统架构的详细解释: 1. **Red5服务器**:Red5是一个开源的流媒体...

    基于emgucv3.2 的人脸捕获,视频录像保存avi,mp4等格式

    CvInvoke.Rectangle(frame, face, new Bgr(Color.Red).MCvScalar, 2); } ``` 现在,我们已经学会了如何捕获摄像头视频和检测人脸,接下来将实现视频录像功能。EmguCV提供了`VideoWriter`类来保存视频到文件。以下...

    网站制作代码及其录像网站制作代码及其录像

    document.querySelector('h1').style.color = 'red'; ``` ### 创建录像网站的技术要点 #### 1. 视频播放支持 为了在网站上播放视频,需要了解如何嵌入视频文件以及处理视频流媒体。 - **HTML5 视频标签**:`...

    node-red-contrib-hikvision-ultimate:海康威视摄像头、警报、雷达等的本地节点集

    一组用于海康威视摄像机、警报、雷达、NVR 等的本地节点。 描述 这是一组处理 ISAPI 海康威视消息的节点。 它仅适用于HIKVISION设备。 适用于摄像头、NVR、安全系统以及专用设备,如雷达(例如 DS-PR1-60、DS-PR1-...

    LINUX高级企业版教学录像(清华培训中心)

    10. **企业版特性**:针对Red Hat Enterprise Linux、SUSE Linux Enterprise Server等企业级发行版的特性和优势进行深入讲解。 通过这份【LINUX高级企业版教学录像(清华培训中心)】,你不仅可以获得理论知识,还...

    RED7Studios.AxNVR

    标题“RED7Studios.AxNVR”暗示我们正在讨论一个与视频监控系统相关的软件,可能是一个网络视频录像机(NVR)的应用程序。RED7Studios可能是开发这个软件的公司,而.AxNVR可能是该软件的特定命名格式或者模块标识。 ...

    Red Squirrel Cam-开源

    使用Red Squirrel Cam,用户可以实现以下功能: 1. **实时监控**:系统能实时显示多个摄像头的画面,让用户随时掌握监控区域的情况。 2. **录像回放**:用户可以查看历史录像,便于分析事件或调查。 3. **报警触发*...

    Redhat Linux9 安装的全程演示录

    这通常通过校验MD5或SHA值来验证。然后,你需要一个安装媒介,可以是CD/DVD,也可以是USB驱动器。使用软件如Rufus或 Brasero 创建可启动的安装媒体。 接下来,进入安装过程。启动计算机并设置BIOS以从你的安装媒介...

    使用树莓派3做的一套农业监控系统.zip

    此外,可以使用Node-RED或Home Assistant等物联网平台,实现数据的远程监控和自动化控制,比如当环境条件偏离预设范围时,自动触发通风、灌溉或照明设备。 总结,通过树莓派3构建的农业监控系统,实现了种植环境的...

    Linux学习网址(txt)Linux高级培训录像

    "Linux学习网址(txt)Linux高级培训录像"这个压缩包显然旨在帮助用户深入理解并掌握Linux的相关知识。以下是对标题和描述中提及的知识点的详细解释: 1. **Linux安装和配置**:Linux的安装过程通常包括选择发行版、...

    linux安装全程演示录像

    本视频教程全面详细地讲解演示如何安装Red Hat Linux系统,包括磁盘分区、网络和防火墙的配置、认证配置、X服务器的配置等等内容,非常超值,对初学Linux系统的朋友非常有帮助,因为实际操作非常重要,一起学习吧!

    企业级Linux服务攻略.陈涛等.扫描版.pdf

    本书以目前red hat公司最新版本red hat enterprise linux 5为平台,对linux的网络服务应用进行了详细的讲解。全书分为12章,阐述了linux网络服务的知识,内容涵盖linux安装及网络环境搭建、samba服务、dns服务、dhcp...

    bmrec:基于FFmpeg的快速,易于使用的屏幕录像软件

    一个基于FFmpeg的快速,易于使用的屏幕录制软件。 关于 bmrec是FFmpeg的前端,FFmpeg是一个程序,用于基于命令行的视频和音频文件处理。bmrec的GUI简单易用。 这是主菜单: 也有暗模式 要求 最新的Java版本。 下载 ...

Global site tag (gtag.js) - Google Analytics