`
JadeLuo
  • 浏览: 425535 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

actionscript rtmp 推流

 
阅读更多

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="applicationComplete()" layout="absolute" pageTitle="push" backgroundColor="#000">	
	<mx:Script>
		<![CDATA[    
			import flash.filters.BitmapFilterQuality;
			import flash.filters.BlurFilter;
			import flash.filters.DropShadowFilter;
			import flash.filters.GlowFilter;
			import mx.controls.Alert;
			import mx.controls.VideoDisplay;
			import mx.utils.URLUtil;
			private var camWidth:Number = 320;
			private var camHeight:Number = 240;
			private var _camera:Camera = null;
			private var quality:Number = 0;
			private var PADDING_HORIZONTAL:Number = 6;
			private var PADDING_VERTICAL:Number = 29;
			private var _minWidth:int = 160 + PADDING_HORIZONTAL;
			private var _minHeight:int = 120 + PADDING_VERTICAL;
			private var aspectRatio:Number = 4/3;
			private var cameraConf:Object;
			private var videoConf:Object;
			private var liveStreamName:String="a";
			private var nc:NetConnection;
			private var ns:NetStream;
			private var mic:Microphone;
			private var _netConnection:NetConnection;
			private var uri:String="rtmp://需要推流ip可以找我 qq:626776246 /myapp";
			private var camIndex:String="0";//默认为第一个摄像头
			private var camIndexInt:int=-1;//大于0小于摄像头个数时以此值控制选择摄像头 否则由开始装载swf文件传入的参数为准 如也未传入默认取系统第一个摄像头 
			
			private var _avatarURL:String;
			private var displayAvatar:Boolean = false;
			private var loader:Loader = new Loader();
			private var request:URLRequest;
			private var avatarWidth:Number = 320;
			private var avatarHeight:Number = 240;
			private var filtersArray:Array;
			private var jsParam:Object;
			
			private function applicationComplete():void
			{
				Security.allowDomain("*");
				initExternalInterface();
				
				if (stage) {  
					jsParam =  stage.loaderInfo.parameters; 
					if(jsParam){
						if(jsParam.uri != null)
						uri = jsParam.uri;
						if(jsParam.sn != null)
						liveStreamName = jsParam.sn;
						debug("as_uri= "+jsParam.uri);
						debug("as_sn= "+jsParam.sn);
					}
				}
				
				ExternalInterface.call("getCamInfoCallback", Camera.names);
				startPush({"camIndex":0});
			}
			
			
			public function displayCamera():void {
				var cl: int = Camera.names.length ;
				if ( cl == 0) {
					Alert.show("未找到摄像头");
					return;
				}
				
				if(camIndexInt > 0){
					if(camIndexInt < cl){
						camIndex=""+camIndexInt;
					}
					else{
						Alert.show("startPush方法传入的摄像头索引超出系统当前可用摄像头个数");
					}
				}
				
//				camIndex = "0";
				debug("准备获取第"+camIndex+"个摄像头");
				_camera = Camera.getCamera(camIndex);
				if (_camera == null) {
					debug("获取第"+camIndex+"摄像头为空");
					return;
				}
				
				_camera.setMotionLevel(5, 1000);//
//				_camera.setKeyFrameInterval(15);
				_camera.setMode(640, 480, 25);
				_camera.setQuality(0, 90);
				
				mic = Microphone.getMicrophone();
				mic.encodeQuality = 10;  
				mic.rate = 44;  
				mic.setSilenceLevel(20,200);
				var soundTrans:SoundTransform = new SoundTransform();
				soundTrans.volume = 0.6;
				mic.soundTransform=soundTrans;
				
				ns = new NetStream(nc);//Error #2044: 未处理的 NetStatusEvent:。 level=error, code=NetStream.Publish.BadName 同一地址重复推流
				ns.attachCamera(_camera);
				ns.attachAudio(mic);
				ns.publish(liveStreamName,"live");
				debug("liveStreamName="+liveStreamName);

				videoDisplay.mx_internal::videoPlayer.bufferTime = 1;
				videoDisplay.source = uri + "/" + liveStreamName;
				videoDisplay.play();
//				appFilter(videoDisplay);
			}
			
			private function initExternalInterface():void {
				if (ExternalInterface.available) {
					ExternalInterface.addCallback("startPush", startPush);
//					ExternalInterface.addCallback("stopPush", stopPush);
					ExternalInterface.addCallback("appFilter", appFilter);
					ExternalInterface.addCallback("removeFilter", removeFilter);
				}
			}
			
			public function startPush(optConfig:Object):void{
				nc = new NetConnection();
				nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
				nc.client = this;
				if(uri == null){
					Alert.show("推流地址为空");
				}
				nc.connect(uri);
				if(optConfig != null && !isNaN(optConfig.camIndex))
					camIndexInt = optConfig.camIndex;
			}
			
			private function onNetStatus(event:NetStatusEvent):void{
				debug(event.info.code);
				switch(event.info.code){
					case "NetConnection.Connect.Success":
						displayCamera();
						break;
					case "NetConnection.Connect.Failed":
						debug("Failed");
						break;
					case "NetConnection.Connect.AppShutDown":
						debug("AppShutDown");
						break;
					
					case "NetConnection.Connect.NetworkChange":
						debug("NetworkChange");
						break;
					
					case "NetConnection.Connect.Closed":	
						debug("Closed");
						ExternalInterface.call("pushreconnect");
						break;
				}
				
			}
			
			public function debug(param:String):void
			{
//				Alert.show(param);
				ExternalInterface.call("debug",	 param);
			}
			
			
			public function onBWDone():void{ }//不可删除
			
			public function displayPublishingVideo():void{
			
			}
			
			
			private function determineHTMLURL():String {
				var serverName:String = "*";
				if(ExternalInterface.available) {
					try {
						var htmlURL:String = String(ExternalInterface.call("window.location.href.toString"));
						serverName = URLUtil.getServerName(htmlURL);
					} catch(s:Error) {
						debug(s.getStackTrace());
					}
				}
				return serverName;
			}
			
			
			
			/**
			 * ActionScript 3.0  包括 9  个可用于显示对象和 BitmapData  对象的滤镜类:
			 ■ 斜角滤镜 ( BevelFilter  类)
			 ■ 模糊滤镜 ( BlurFilter  类)
			 ■ 投影滤镜 ( DropShadowFilter  类)
			 ■ 发光滤镜 ( GlowFilter  类)
			 ■ 渐变斜角滤镜 ( GradientBevelFilter  类)
			 ■ 渐变发光滤镜 ( GradientGlowFilter  类)
			 ■ 颜色矩阵滤镜 ( ColorMatrixFilter  类)
			 ■ 卷积滤镜 ( ConvolutionFilter  类)
			 ■ 置换图滤镜 ( DisplacementMapFilter  类)
			 */
				public function appFilter(_videoDisplay:VideoDisplay):void {
				var bitmapData:BitmapData=new BitmapData(200,200,false,0xFF009900);
				var displayobject:Bitmap=new Bitmap(bitmapData);
				addChild(displayobject);
				displayobject.x=130;
				displayobject.y=80;
				var dropShadow:DropShadowFilter=new DropShadowFilter();
				
				//创建bitmapData对象并将它呈现在屏幕上
				var bitmapData2:BitmapData=new BitmapData(200,200,false, 0xFF009901);
				var displayobject2:Bitmap=new Bitmap(bitmapData2);
				addChild(displayobject2);
				//设置位置
				displayobject2.x=130;
				displayobject2.y=80;
				//创建滤镜实例
				var glowFilter:GlowFilter=new GlowFilter(0x0000FF);
				//创建滤镜数组,通过将滤镜作为参数传递给Array()构造函数,
				//将该滤镜添加到数组中
				//创建bitmapData对象并将它呈现在屏幕上
				var bitmapData3:BitmapData=new BitmapData(200,200,false,0x0000FF);
				var displayobject3:Bitmap=new Bitmap(bitmapData3);
				addChild(displayobject3);
				//设置位置
				displayobject3.x=130;
				displayobject3.y=80;
				//创建滤镜实例
				var blurX:Number=30;
				var blurY:Number=30;
				var gradientBevelFilter:BlurFilter=new BlurFilter(blurX,blurY,BitmapFilterQuality.HIGH);
//				filtersArray =new Array(dropShadow,glowFilter);
				filtersArray =new Array(glowFilter);
				_videoDisplay.filters = filtersArray;
				debug("appFilter");
			}
			
			public function removeFilter():void {
				filtersArray = new Array();
//				_videoDisplay.filters = filtersArray;
				debug("removeFilter");
			}
 
		]]>
	</mx:Script>
		 <mx:VideoDisplay  x="0" y="0"  width="100%" height="100%" id="videoDisplay"></mx:VideoDisplay>
</mx:Application>

 

分享到:
评论

相关推荐

    web 网页 直播推流 通过Flash获取,再转为RTMP

    这个项目可能包括了ActionScript代码,用于处理视频捕捉、编码、推流以及与服务器的交互。此外,可能还包括了服务器配置信息和部署指南,帮助用户将这个直播推流系统运行在自己的服务器上。 需要注意的是,随着...

    最简单的Flash流媒体例子

    simplest_as3_rtmp_streamer:最简单的RTMP推流器(基于ActionScript) rtmp_sample_player_adobe:从Adobe Flash Media Sever提取出来的测试播放器 rtmp_sample_player_wowza:从Wowza服务器中提取出来的测试播放器 ...

    RTMP直播例子--基于FLASH/FLEX(含源代码) 下载

    在直播场景中,视频源(如摄像头)捕获的音视频数据会被编码并推送到RTMP服务器,然后服务器将这些数据分发给订阅的客户端。客户端通过RTMP协议接收数据并在本地解码播放。 FLEX是一种基于ActionScript 3的开放源...

    rtmpVideoPlayer

    2. 创建RTMP流:将视频内容推送到服务器,生成一个RTMP URL。 3. 配置`rtmpVideoPlayer`:在HTML文件中嵌入Flash Player,并设置RTMP URL参数,使其指向之前创建的流。 4. 测试播放:在浏览器中打开HTML页面,`...

    red5oflaDemo.zip

    它允许内容发布者向服务器推送数据流,而服务器再将这些流推送给客户端。OFLA(Open Flash Live Audio)是Red5对RTMP协议的一个实现,主要用于音频和视频的实时传输。 流媒体服务器如Red5对于在线教育、视频会议、...

    Flash Builder 开发播放器(本地,点播,直播)

    开发者通常会使用编码器将视频源(如摄像头输入)编码成RTMP兼容的格式,然后推送到RTMP服务器。在Flash Builder中,NetStream对象同样扮演关键角色,它负责接收服务器推送的流并将其呈现给用户。 关于标签中的"FLV...

    Flash Media Server 入门教程

    在FMS中,你可以创建RTMP流,将媒体文件推送到服务器,或者从服务器拉取流数据。 四、FMS应用开发 1. ActionScript API:FMS提供了ActionScript API,使得开发者可以使用Flash Player或Adobe AIR编写客户端应用程序...

    red5 server 1.0.10-M7 源码

    RTMP是一种广泛用于在线流媒体传输的协议,由Adobe Systems开发,主要用于将音视频数据实时推送到服务器,然后由服务器分发给客户端。Red5 Server就是实现了RTMP协议的一个服务器端软件,它支持流媒体的录制、播放、...

    与red5通信实例

    5. **流媒体处理**:了解流媒体的基本概念,如推流和拉流,以及如何处理流的编码、解码和转换,这对于创建有效的Red5应用至关重要。 6. **服务器配置**:设置和管理Red5服务器,包括安装、配置服务器端的流媒体存储...

    网络直播平台

    2. **推流**:编码后的视频流通过RTMP(Real-Time Messaging Protocol)协议推送到服务器。RTMP是Flash专为实时流媒体设计的协议,它允许低延迟的数据传输,非常适合直播应用。 3. **服务器处理**:服务器接收到...

    red5入门详细教程

    Flash客户端可以捕获用户摄像头的视频流,然后通过RTMP协议推送到Red5服务器,其他客户端则可以从服务器拉取直播流观看。 2. 录制与回放:Red5支持媒体录制功能,允许客户端将接收到的流保存到服务器。这样,用户...

    RED5流媒体服务器

    在实际应用中,RED5可以与其他工具配合使用,如FFmpeg进行视频编码和转换,或者Adobe Flash Media Live Encoder进行实时流推流。RED5还支持录制、播放、点播等功能,通过创建应用程序和自定义服务,可以实现更复杂的...

    FMS视频直播,点播源码

    7. **直播功能实现**:直播涉及到捕捉、编码、推流到FMS服务器的过程。这可能需要第三方硬件或软件,如OBS Studio,开发者需要知道如何与这些工具集成,并处理延迟、稳定性等问题。 8. **安全性与版权保护**:包括...

    oflaDemo_src

    3. **ActionScript客户端代码**:在`web`目录下,`client`子目录包含Flash ActionScript代码,用于与Red5服务器交互,如`oflaDemo.asc`文件,这是Flash客户端的主脚本,实现了推流、拉流等功能。 4. **Web资源**:`...

    流媒体服务器---fms3教程

    1. 实时流发布:FMS3支持RTMP协议,可将音视频内容实时推送到服务器,供多个用户同时观看。 2. 内容录制:服务器可以记录直播流,以便后续点播。 3. 内容存储与分发:FMS3支持存储流媒体内容,并通过边缘服务器分发...

    as2与RED5播放视频

    RED5支持发布和订阅流,这意味着你可以将视频推送到服务器,或者从服务器拉取视频流。 为了在AS2中播放RED5服务器上的视频,你需要在RED5上部署一个流应用。这通常涉及到创建一个Application Mapping,指定一个应用...

    直播服务red5服务压缩包,解压可直接启动,本人自用

    推流是指将直播源发送到服务器的过程,而拉流则是客户端从服务器获取流媒体数据进行播放。这种功能使得Red5能与各种直播源(如摄像头、编码器等)配合,并为观看者提供稳定流畅的直播体验。 在实际使用中,Red5的...

    Red5 pro latest

    RTMP(Real-Time Messaging Protocol)是一种广泛使用的协议,主要用于将音频、视频数据从服务器推送到客户端。RTMP协议以其低延迟特性而受到青睐,适合直播和在线游戏等实时性要求高的场景。Red5 Pro对RTMP的全面...

    red5入门教程(pdf)

    5. **流媒体处理**:Red5支持实时推流和拉流,可以实现视频直播。通过RTMP协议,客户端可以将视频流推送到服务器,然后由服务器分发给其他客户端。此外,Red5还支持视频录制,可以将直播内容保存到服务器上供后期...

    AS3与RED5 播放视频

    例如,用户可以通过AS3将本地摄像头的视频流推送到RED5服务器进行录制: ```actionscript var publishName:String = "recordedVideo"; var recordStream:NetStream = new NetStream(nc); recordStream.publish...

Global site tag (gtag.js) - Google Analytics