<?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>