私はここでビデオプレーヤーを構築しています:http://leongaban.com/stackoverflow/RTMP/
これはストリーミングRTMPであり、ユーザーがグルーブバー(緑色のプログレスバーの下にある灰色のバー)をクリックした場合にビデオを正しくシークさせようとしています。現在、シークせず、継続時間変数にNaNが表示され、エラーが発生します。プログレスバーの幅の変数で、私を困惑させています。
何らかの理由で、シーカー関数内で使用すると、videoDuration変数がNaNとして表示されます。また、グルーブバーの合計幅であるplayerCntrls.progressTotalWをトレースしようとすると、nullオブジェクト参照エラーが発生します。
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
ここで、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);
}
ヒントやアドバイスをいただければ幸いです。:)