Я создаю видео плеер здесь: http://leongaban.com/stackoverflow/RTMP/
Это потоковый RTMP, и я пытаюсь заставить мое видео искать правильно, если пользователь нажимает на полосу пазов (серая полоса под зеленой полосой прогресса). В настоящее время оно не ищет и дает мне NaN для моей переменной продолжительности. и ошибка в моей переменной ширины индикатора выполнения, которая озадачивает меня.
По какой-то причине моя переменная videoDuration выглядит как NaN при использовании внутри моей функции поиска, также я получаю ошибку ссылки на нулевой объект при попытке отследить playerCntrls.progressTotalW, который является общим ширина бороздки:
VideoDisplay.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;
PlayerControls.as
Теперь я добавляю EventListener в свой PlayerControls.as для вызова функции поиска в моем 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);
}
Любые советы или рекомендации будут с благодарностью! :)