我在这里建立一个视频播放器:http: //leongaban.com/stackoverflow/RTMP/
它正在流式传输 RTMP,如果用户单击凹槽栏(绿色进度条下方的灰色栏),我正试图让我的视频正确搜索。目前它不会搜索并在我的持续时间变量上给我一个 NaN 和一个错误在我的进度条宽度变量上,这让我感到困惑。
出于某种原因,当在我的搜索器函数内部使用时,我的videoDuration 变量显示为 NaN,当我尝试追踪 playerCntrls.progressTotalW 时,我得到一个空对象引用错误,这是凹槽条的总宽度:
视频显示.as
public function seeker(e:MouseEvent):void
{
trace("clicked the groove bar");
trace("mouseX = "+mouseX);
trace("videoDuration = "+videoDuration);
trace("playerCntrls.progressTotalW = "+playerCntrls.progressTotalW);
ns.seek(Math.round(mouseX * videoDuration / playerCntrls.progressTotalW));
playerCntrls.progressBar.width = mouseX * playerCntrls.progressTotalW / videoDuration;
}
[痕迹]
clicked the groove bar
mouseX = 135
videoDuration = NaN
TypeError: Error #1009: Cannot access a property or method of a null object reference.
但是在我的 updateDisplay 函数中,我没有得到任何错误跟踪或使用这些相同的变量:
private function updateDisplay(e:TimerEvent):void
{
currentTime = ns.time;
currentFormattedTime = convertTime(currentTime);
playerCntrls.updateTime();
playerCntrls.progressBar.width = ns.time * playerCntrls.progressTotalW / videoDuration;
trace("videoDuration = "+videoDuration);
trace("ns.time = "+ns.time);
trace("Progress Width = "+playerCntrls.progressBar.width);
}
这是我设置 videoDuration 变量的地方:
function getMetaData(client_ns)
{
var metaData:Object = new Object();
metaData.onMetaData = function(metaData:Object):void
{
videoDuration = metaData.duration;
trace("metadata duration = "+videoDuration);
tmrDisplay.start();
}
return client_ns.client = metaData;
}
playerCntrls 链接到我的 PlayerControls.as
public var playerCntrls:PlayerControls;
播放器控件.as
现在这是我在 PlayerControls.as 中添加一个 EventListener 以在我的 VideoDisplay.as 中调用搜索器函数的地方
// Create Progress Bar ··········································
public function createProgress():void
{
progressBar = new ProgBar;
progressBar.mouseEnabled = false;
progressBar.mouseChildren = false;
progressBar.x = grooveX;
progressBar.y = grooveY;
progressBar.width = 1;
progressBar_color = progressBar.colorChip;
TweenLite.to(progressBar_color, .1, {tint:xmlColor});
controls.addChild(groove);
controls.addChild(progressBar);
groove.addEventListener(MouseEvent.MOUSE_UP, videoDsply.seeker);
}
任何提示或建议将不胜感激!:)