Flash JWPlayer闪存插件内存泄漏
我将这个Flash插件修改为JWPlayer,但有些人认为它会使我的播放器崩溃。当我改变视频时会发生这种情况,所以我猜这不是删除元素和关闭插件。我试着用console记录所有的事情,当改变视频时,它会停止console.logging,所以我不知道这个假设Flash JWPlayer闪存插件内存泄漏,flash,plugins,jwplayer,Flash,Plugins,Jwplayer,我将这个Flash插件修改为JWPlayer,但有些人认为它会使我的播放器崩溃。当我改变视频时会发生这种情况,所以我猜这不是删除元素和关闭插件。我试着用console记录所有的事情,当改变视频时,它会停止console.logging,所以我不知道这个假设 package { import com.longtailvideo.jwplayer.events.*; import com.longtailvideo.jwplayer.player.*; import com.
package {
import com.longtailvideo.jwplayer.events.*;
import com.longtailvideo.jwplayer.player.*;
import com.longtailvideo.jwplayer.plugins.*;
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.text.*
import flash.net.*;
import flash.geom.*;
import flash.external.ExternalInterface;
/** An example plugin that tests various player integrations. **/
public class APITester extends Sprite implements IPlugin6 {
private var api:IPlayer;
private var player:IPlayer;
private var maskedClip:MovieClip;
private var tickertop:TextField;
private var tickermid:TextField;
private var tickertopBg:Sprite;
private var tickermidBg:Sprite;
private var pluginConfig:PluginConfig;
private var isPlaying:Boolean;
private var randNumber:Number;
public function get id():String {
return "apitester";
};
public function get target():String {
return "6.0";
}
public function APITester() {
tickertopBg = new Sprite();
tickertop = new TextField();
tickermidBg = new Sprite();
tickermid = new TextField();
ExternalInterface.call("console.log", randNumber + " : " + "0");
randNumber = Math.floor(Math.random() * (1 - 500000 + 1)) + 5000000;
};
public function initPlugin(player:IPlayer, config:PluginConfig):void {
ExternalInterface.call("console.log", randNumber + " : " + "Start");
api = player;
player = player;
tickertop.htmlText = config['ticker1'];
tickermid.htmlText = config['ticker2'];
tickertopBg.graphics.beginFill(0xe3bfa3,1);
tickertopBg.graphics.drawRect(0,0,stage.stageWidth,30);
tickertopBg.x = 0;
tickertopBg.y = 0;
tickertopBg.visible = false;
tickertopBg.alpha = 0;
tickertopBg.graphics.endFill();
addChild(tickertopBg);
var tickertopFormat:TextFormat = new TextFormat();
tickertopFormat.font = "PT Sans";
tickertopFormat.color = 0x000000;
tickertopFormat.size = 20;
tickertopFormat.bold = true;
tickertop.setTextFormat(tickertopFormat);
tickertop.autoSize = TextFieldAutoSize.LEFT;
tickertop.x = 0;
tickertop.y = 0;
tickertop.height = 30;
tickertop.visible = false;
tickertop.alpha = 0;
//tickertop.width = stage.stageWidth;
tickertop.textColor = 0x000000;
addChild(tickertop);
tickermidBg.graphics.beginFill(0x000000,1);
tickermidBg.graphics.drawRect(0,0,stage.stageWidth,20);
tickermidBg.x = 0;
tickermidBg.y = 30;
tickermidBg.visible = false;
tickermidBg.alpha = 0;
tickermidBg.graphics.endFill();
addChild(tickermidBg);
var tickermidFormat:TextFormat = new TextFormat();
tickermidFormat.font = "PT Sans";
tickermidFormat.size = 16;
tickermidFormat.bold = true;
tickermid.setTextFormat(tickermidFormat);
tickermid.autoSize = TextFieldAutoSize.LEFT;
tickermid.x = 0;
tickermid.y = 29;
tickermid.visible = false;
tickermid.alpha = 0;
tickermid.height = 20;
//tickermid.width = stage.stageWidth;
//tickermid.textColor = 0xFFFFFF;
addChild(tickermid);
api.addEventListener(MediaEvent.JWPLAYER_MEDIA_COMPLETE, completeHandler);
api.addEventListener(Event.ENTER_FRAME,EnterFrame);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseOverStage);
function mouseOverStage(evt:Event):void
{
ExternalInterface.call("console.log", randNumber + " : " + "3");
hideItems();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseOverStage);
stage.addEventListener(Event.MOUSE_LEAVE, mouseOut);
}
function mouseOut(evt:Event):void
{
ExternalInterface.call("console.log", randNumber + " : " + "2");
showItems();
stage.removeEventListener(Event.MOUSE_LEAVE, mouseOut);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseOverStage);
}
api.addEventListener(PlayerStateEvent.JWPLAYER_PLAYER_STATE, stateHandler);
};
public function EnterFrame(event:Event):void {
ExternalInterface.call("console.log", randNumber + " : " + "2");
if (isPlaying) {
tickermid.x -= 5;
ExternalInterface.call("console.log", randNumber + " : " + "20");
if(tickermid.x < -(tickermid.width)) {
ExternalInterface.call("console.log", randNumber + " : " + "21");
tickermid.x = stage.stageWidth;
}
if(tickermid.x > (stage.stageWidth)) {
ExternalInterface.call("console.log", randNumber + " : " + "22");
tickermid.x = -(tickermid.width);
}
tickertop.x -= 4;
if(tickertop.x < -(tickertop.width)) {
ExternalInterface.call("console.log", randNumber + " : " + "23");
tickertop.x = stage.stageWidth;
}
if(tickertop.x > (stage.stageWidth)) {
ExternalInterface.call("console.log", randNumber + " : " + "24");
tickertop.x = -(tickermid.width);
}
}
}
public function showItems():void {
if (isPlaying) {
tickertopBg.visible = true;
tickertopBg.alpha = 1;
tickertop.visible = true;
tickertop.alpha = 1;
tickermidBg.visible = true;
tickermidBg.alpha = 1;
tickermid.visible = true;
tickermid.alpha = 1;
}
};
public function hideItems():void {
tickertopBg.visible = false;
tickertopBg.alpha = 0;
tickertop.visible = false;
tickertop.alpha = 0;
tickermidBg.visible = false;
tickermidBg.alpha = 0;
tickermid.visible = false;
tickermid.alpha = 0;
};
private function completeHandler(evt:MediaEvent):void {
api.removeEventListener(Event.ENTER_FRAME,EnterFrame);
isPlaying = false;
};
private function stateHandler(event:PlayerStateEvent):void {
switch (event.newstate) {
case PlayerState.PAUSED:
ExternalInterface.call("console.log", randNumber + " : " + "50");
break;
case PlayerState.PLAYING:
ExternalInterface.call("console.log", randNumber + " : " + "51");
isPlaying = true;
showItems();
break;
case PlayerState.IDLE:
ExternalInterface.call("console.log", randNumber + " : " + "52");
api.removeEventListener(Event.ENTER_FRAME,EnterFrame);
isPlaying = false;
hideItems();
break;
case PlayerState.BUFFERING:
ExternalInterface.call("console.log", randNumber + " : " + "52");
api.removeEventListener(Event.ENTER_FRAME,EnterFrame);
isPlaying = false;
hideItems();
break;
}
};
/** If the player resizes itself, this gets called (including on setup). **/
public function resize(wid:Number, hei:Number):void {
ExternalInterface.call("console.log", randNumber + " : " + "6");
if(stage.stageWidth == 290) {
var tickertopFormat0:TextFormat = new TextFormat();
tickertopFormat0.size = 12;
tickertop.setTextFormat(tickertopFormat0);
tickertopBg.height = 14;
//
var tickermidFormat0:TextFormat = new TextFormat();
tickermidFormat0.size = 10;
tickermid.setTextFormat(tickermidFormat0);
tickermidBg.height = 12;
//
tickertop.y = hei - (tickertop.height+9);
tickertopBg.y = hei - (tickertopBg.height+12);
tickermid.y = hei - (tickermid.height-2);
tickermidBg.y = hei - (tickermidBg.height);
} else if(stage.stageWidth > 750 && stage.stageWidth != 290) {
//
var tickertopFormat:TextFormat = new TextFormat();
tickertopFormat.size = 48;
tickertop.setTextFormat(tickertopFormat);
tickertopBg.height = 58;
//
var tickermidFormat:TextFormat = new TextFormat();
tickermidFormat.size = 26;
tickermid.setTextFormat(tickermidFormat);
tickermidBg.height = 36;
//
tickertop.y = hei - (tickertop.height+41);
tickertopBg.y = hei - (tickertopBg.height+41);
tickermid.y = hei - (tickermid.height+5);
tickermidBg.y = hei - (tickermidBg.height+5);
} else {
//
var tickertopFormat2:TextFormat = new TextFormat();
tickertopFormat2.size = 20;
tickertop.setTextFormat(tickertopFormat2);
tickertopBg.height = 30;
//
var tickermidFormat2:TextFormat = new TextFormat();
tickermidFormat2.size = 16;
tickermid.setTextFormat(tickermidFormat2);
tickermidBg.height = 24;
//
tickertop.y = hei - (tickertop.height+21);
tickertopBg.y = hei - (tickertopBg.height+20);
tickermid.y = hei - (tickermid.height);
tickermidBg.y = hei - (tickermidBg.height);
}
showItems();
//
tickertop.width = stage.stageWidth;
tickermid.width = stage.stageWidth;
tickertopBg.width = stage.stageWidth;
tickermidBg.width = stage.stageWidth;
};
}
}
包{
导入com.longtailvideo.jwplayer.events.*;
导入com.longtailvideo.jwplayer.player.*;
导入com.longtailvideo.jwplayer.plugins.*;
导入flash.display.*;
导入flash.events.*;
导入flash.utils。*;
导入flash.text*
导入flash.net。*;
导入flash.geom.*;
导入flash.external.ExternalInterface;
/**测试各种播放器集成的示例插件**/
公共类ApitTester扩展了Sprite实现IPlugin6{
私有var-api:IPlayer;
私人玩家:IPlayer;
私有var maskedClip:MovieClip;
私有变量tickertop:TextField;
私有变量tickermid:TextField;
私有变量:Sprite;
private-var-rmidbg:Sprite;
私有变量pluginfig:pluginfig;
私有变量显示:布尔值;
私人号码:号码;
公共函数get id():字符串{
返回“apitester”;
};
公共函数get target():字符串{
返回“6.0”;
}
公共功能测试仪(){
tickertopBg=新精灵();
tickertop=新文本字段();
tickermidBg=新精灵();
tickermid=newtextfield();
调用(“console.log”,randNumber+:“+”0”);
randNumber=Math.floor(Math.random()*(1-500000+1))+5000000;
};
公共函数initPlugin(player:IPlayer,config:PluginConfig):void{
调用(“console.log”,randNumber+:“+”Start”);
api=播放器;
玩家=玩家;
tickertop.htmlText=config['ticker1'];
tickermid.htmlText=config['ticker2'];
tickertopBg.graphics.beginll(0xe3bfa3,1);
tickertopBg.graphics.drawRect(0,0,舞台宽度,30);
tickertopBg.x=0;
tickertopBg.y=0;
tickertopBg.visible=false;
tickertopBg.alpha=0;
tickertopBg.graphics.endFill();
addChild(tickertopBg);
var tickertopFormat:TextFormat=新的TextFormat();
tickertopFormat.font=“PT Sans”;
tickertopFormat.color=0x000000;
tickertopFormat.size=20;
tickertopFormat.bold=true;
tickertop.setTextFormat(tickertopFormat);
tickertop.autoSize=TextFieldAutoSize.LEFT;
tickertop.x=0;
tickertop.y=0;
tickertop.height=30;
tickertop.visible=false;
tickertop.alpha=0;
//tickertop.width=stage.stageWidth;
tickertop.textColor=0x000000;
addChild(tickertop);
tickermidBg.graphics.beginll(0x000000,1);
tickermidBg.graphics.drawRect(0,0,stage.stageWidth,20);
tickermidBg.x=0;
tickermidBg.y=30;
tickermidBg.visible=false;
tickermidBg.alpha=0;
tickermidBg.graphics.endFill();
addChild(tickermidBg);
var tickermidFormat:TextFormat=newtextformat();
tickermidFormat.font=“PT Sans”;
tickermidFormat.size=16;
tickermidFormat.bold=true;
setTextFormat(tickermidFormat);
tickermid.autoSize=TextFieldAutoSize.LEFT;
tickermid.x=0;
tickermid.y=29;
tickermid.visible=false;
tickermid.alpha=0;
tickermid.height=20;
//tickermid.width=stage.stageWidth;
//tickermid.textColor=0xFFFFFF;
addChild(tickermid);
api.addEventListener(MediaEvent.JWPLAYER\u MEDIA\u COMPLETE,completeHandler);
api.addEventListener(事件。输入帧,输入帧);
stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseOverStage);
函数mouseOverStage(evt:事件):void
{
调用(“console.log”,randNumber+:“+”3”);
hideItems();
stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseOverStage);
stage.addEventListener(Event.MOUSE\u LEAVE,mouseOut);
}
函数mouseOut(evt:事件):无效
{
调用(“console.log”,randNumber+:“+”2”);
showItems();
stage.removeEventListener(Event.MOUSE\u LEAVE,mouseOut);
stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseOverStage);
}
api.addEventListener(PlayerStateEvent.JWPLAYER\u PLAYER\u STATE,stateHandler);
};
公共函数EnterFrame(事件:事件):无效{
调用(“console.log”,randNumber+:“+”2”);
如果(显示){
tickermid.x-=5;
调用(“console.log”,randNumber+:“+”20”);
如果(勾号x<-(勾号宽度)){
调用(“console.log”,randNumber+:“+”21”);
tickermid.x=stage.stageWidth;
}
如果(tickermid.x>(stage.stageWidth)){
调用(“console.log”,randNumber+:“+”22”);
tickermid.x=-(tickermid.width);
}
tickertop.x-=4;
如果(tickertop.x<-(tickertop.width)){
调用(“console.log”,randNumber+:“+”23”);
tickertop.x=stage.stageWidth;
}
如果(tickertop.x>(stage.stageWidt