<?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>
相关推荐
simplest_as3_rtmp_streamer:最简单的RTMP推流器(基于ActionScript) rtmp_sample_player_adobe:从Adobe Flash Media Sever提取出来的测试播放器 rtmp_sample_player_wowza:从Wowza服务器中提取出来的测试播放器 ...
第1章 揭开ActionScript的神秘面纱 第2章 Flash MX的动作面板 第3章 ActionScript编程初步 第4章 影片播放控制 第5章 控制影片剪辑 第6章 影片剪辑属性 第7章 影片剪辑方法 第8章 响应键盘 9章 输入文本和字符串...
第1篇ActionScript3.0语言基础 第1章ActionScript3.0概述 2 1.1ActionScript概述 2 1.1.1ActionScript环境 2 1.1.2ActionScript3.0特性 3 1.1.3ActionScript3.0代码组织 5 1.2ActionScript3.0API概览 5 1.3小结 8 第...
本书是国内第一本“面向原因式”(Why-Oriented Book)、全面系统介绍Flash ActionScript 3的书籍。全书共分为5个部分。第一部分:ActionScript 3语言基础;第二部分:ActionScript 3 面向对象编程;第三部分:...
《ActionScript 3.0 语言和组件参考》概述 《ActionScript 3.0 语言参考》是 Flash® Player 和 Adobe AIR™ 应用程序编程接口 (API) 的参考手册。 此版本包括支持 Adobe AIR 运行时环境的新 ActionScript 类、...
ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础
ActionScript3代码规范 ActionScript3代码规范 ActionScript3代码规范
第1篇 ActionScript3.0语言基础 第1章 ActionScript3.0概述 第2章 搭建ActionScript3.0开发环境 第3章 ActionScript3.0语法 第2篇 ActionScript3.0面向对象特性 第4章 ActionScript3.0面向对象编程 第...
actionscript3.0开发的进度显示条项目
ActionScript3.0 中文版 ActionScript3.0 api 中文版说明文档
Adobe Flash 中的 ActionScript 2
ActionScript 3.0 是一种强大的面向对象编程语言,它标志着 Flash Player Runtime 演化过程中的一个重要阶段。设计 ActionScript 3.0 的意图是创建一种适合快速地构建效果丰富的互联网应用程序的语言,这种应用程序...
本书详细地介绍了 actionscript 3.0的基础知识,包括 actionscript 3.0语言、actionscript 3.0对象的操作方法、显示列表的使用、事件模型、加载外部素材、可视化编程以及利用声音和视频增强应用程序等方面的知识,并...
本书是一本高级ActionScript 3.0设计模式用书。大家或许也一直没有搞明白“高级”一词的含义。高级ActionScript 3.0指的是本书并不包含API引用函数以及ActionScript 3.0的入门基础这些主题。作者假定读者已经具备...
ActionScript权威指南 ActionScript权威指南
《Flash ActionScript3殿堂之路》共分5个部分。第1部分:ActionScript 3语言基础;第2部分:ActionScript 3面向对象编程;第3部分:ActionScript 3 核心类;第4部分:ActionScript 3主要的Flash Player API;第5部分...
actionscript、javascript嵌套开发的支持rtmp流的flash播放器,根据rtmp地址获取房间号拉流视频,可修改播放器、相机宽高等参数,针对拉流缓冲等待有进度条处理效果。