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>

猜你喜欢

转载自jadeluo.iteye.com/blog/2318025