Timedisplay in Flash

IlllyMilly

Mitglied
Guten Abend Ladies and Gentlemen,

also wie schon einmal angedeutet, bin ich an dem Videoplayer dran und bin eigentlich fertig,
allerdings funktioniert eine Sache nicht so, wie ich es möchte.


Mein Timedisplay... Das heißt, ich hab zwar ein Textfeld angeordnet und es auch zugewiesen, aber mein Actionscript spricht es nicht an.

Die Gesammtlänge wird als " undefined:undefined" angegeben.. und die Länge die noch zu spielen sit wird als 00:00 ohne jegliche Regung angezeigt.


  • Hier der Auszug des Actionsscripts für das Timedisplay

Code:
// Display
onEnterFrame = function () {
	_global.dauer = int(snd.duration/1000);
	_global.position = int(snd.position/1000);
}
	// Total Zeit
	t_TrackZeit = {};
	t_TrackZeit.minutes =  int(_global.dauer/60);
	t_TrackZeit.seconds =  int(_global.dauer%60);
	t_TrackZeit.total = checkDigits(t_TrackZeit.minutes)+":"+ checkDigits(t_TrackZeit.seconds);
	// Bereits
	b_TrackZeit = {};
	b_TrackZeit.minutes = int((_global.position)/60);
	b_TrackZeit.seconds =  int((_global.position)%60);
	b_TrackZeit.total = checkDigits(b_TrackZeit.minutes)+":"+ checkDigits(b_TrackZeit.seconds);
	// Noch zu Spielen
	n_TrackZeit = {};
	n_TrackZeit.minutes = int((_global.dauer - _global.position )/ 60);
	n_TrackZeit.seconds =int(( _global.dauer - _global.position )%60);
	n_TrackZeit.total = checkDigits(n_TrackZeit.minutes)+":"+ checkDigits(n_TrackZeit.seconds);	
	// Ausgabe
	display("gesammt");
	if (zeitSignal) {
		gesammt =n_TrackZeit.total;
	} else {
		gesammt =b_TrackZeit.total;
	}

Als Anhang setz ich nochmals mein Video Player mit hoch.

Würde mich freuen wenn mir jemand Helfen könnte, meinen Fehler zu finden.

Vielen Dank im Vorraus.

die Illy
 

Anhänge

Hi,

Code:
display("gesammt");
Was soll das sein? Du rufst die Funktion "display" auf und übergibst ihr die Zeichenkette "gesammt". Eine solche Funktion ist erstens nicht definiert und zweitens wirst Du wohl kaum den String "gesammt" irgendwo ausgeben wollen ... :confused:


Code:
if (zeitSignal) {
Die Variable "zeitSignal" existiert nicht. Die Bedingung ist also nie erfüllt.


Code:
gesammt =n_TrackZeit.total;
Hier wird zwar eine Textfeldvariable gesetzt, aber wenn dann nur die für eines der beiden Textfelder (gesamt schreibt sich übrigens mit einem "m"). Ich würde Dir empfehlen, nicht mit Textfeldvariablen zu arbeiten (gibt zu viel Verwirrung), sondern die Textfelder über ihren Instanznamen und die .text-Eigenschaft anzusprechen.


Code:
checkDigits(t_TrackZeit.minutes)+":"+ checkDigits(t_TrackZeit.seconds);
Gibt genau garnichts zurück, denn die Funktion "checkDigits" existiert nicht.


Code:
	_global.dauer = int(snd.duration/1000);
	_global.position = int(snd.position/1000);
Der Sound eines NetStream-Objekts gibt weder duration noch position zurück (es handelt sich ja nicht um eine Sounddatei, sondern um dne Spur eines Videostreams). Die Abspielposition des NetStreams erhälts Du über die .time-Eigenschaft des NetStream-Objekts und die Gesamtlänge des Videos aus den Metadaten der Datei (siehe meinen Videoplayer für Details zur Umsetzung).


Code:
if (zeitSignal) {
Die Variable "zeitSignal" existiert nicht. Die Bedingung ist also nie erfüllt.


  • Zu guter Letzt steht Dein gesamter Videozeitblock (Alles, was ab // Total Zeit kommt) ausserhalb Deiner onEnterFrame-Methode und wird deshalb nur einmal ausgeführt ...

Mein Rat: Zurück ans Reißbrett. ;)

Gruß
.
 
Meine Güte...

Mit soviel Fehlern hätte ich nicht gerechnet. Ahja, man lernt ja schliesslich dazu.


@ Tobias... danke für die Zusammenfassung.

allerdings, weiss ich gerade nicht, von welchem Player du gerade sprichst?
Und wo kann ich mir deins runterladen, um es mir anzugucken?

Gruß...


die Illy
 
@ Tobias

Ich muss nochmals stören.

Der Player den du mir gezeigt hast, beinhaltet leider kein Timedisplay?!..

Jedenfalls wenn ich auf Play drücke, spielt er zwar den Film ab, aber sagt mir nicht,
wieviel Sekunden er schon abgespielt hat, und wie die Gesammtlänge des Films ist.

@Topic


Ich frag daher nochmal Allgemein, ob jemand mir hier ein Tutorial zeigen kann, wo der Aufbau eines Timedisplays im Video Player gezeigt wird.

Sprich: Gesammtlänge des Films / Gespielte Zeit....


Vielen Dank.

Illy
 
Hi,

ich habe auch nicht behauptet, dass er dieser Werte anzeigt - lediglich, dass die Werte verarbeitet werden. Eine Suche im Quelltext nach den von mir genannten Begriffen hätte Dir wahrscheinlich folgenden Codeblock gebracht:
Code:
seek_perc = netStream.time * 100 / vid_length;
Die bisherige Abspielzeit steht (wie gesagt) in "netStrean.time" und die Videolänge in "vid_length". Es sollte für Dich kein Problem sein, die Inhalte der beiden Variablen in Textfeldern anzuzeigen.

Wenn das für Dich ein Problem darstellt, sprich: Dir die nötigen AS-Grundlagen fehlen, Variableninhalte in dynamischen Textfeldern anzuzeigen und etwas Code zu lesen, nimm es mir nicht übel, aber dann würde ich Dir raten, Dich erst einmal an einfacheren Projekten als einem Videoplayer zu versuchen. ;)

Gruß
.
 
So hab mich nochmals ran gemacht und dabei ist folgender Code rausgekommen.



Code:
//Netconnection
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
myVideo.attachVideo(stream_ns);
stream_ns.play("http://www.geelife.de/x/ash/shortmovie.flv");
//
stream_ns.onMetaData = function(infoObject:Object) {
    time_txt.text = infoObject.code;
};

var time_interval:Number = setInterval(checkTime, 500, stream_ns);
function checkTime(myVideo_ns:NetStream) {
    var ns_seconds:Number = myVideo_ns.time;
    var minutes:Number = Math.floor(ns_seconds/60);
    var seconds = Math.floor(ns_seconds%60);
        if (seconds<10) {
        seconds = ("0"+seconds);
}
    time_txt.text = minutes+":"+seconds;
}  


stopButton.onRelease = function() {
	delete this.onEnterFrame;
	ns.seek(0);
	myVideo.clear();
	ns.pause();
}


function playMovie() {
	if(!isStarted) {
		ns.play(file);
		isStarted = true;
	} else {
		ns.pause();
	}
	pauseBut._visible = true;
	playBut._visible = false;
	videoDisplay._visible = true;
}


function pauseMovie() {
	ns.pause();
	playBut._visible = true;
	pauseBut._visible = false;
};


videoBg.onPress = function() {
	if(pauseBut._visible == false) {
		playMovie();
	} else {
		pauseMovie();
	}
};


pauseBut.onPress = function() {
	pauseMovie();
};


playBut.onPress = function() {
	playMovie();
};


var videoInterval = setInterval(videoStatus,100);
var amountLoaded:Number;
var duration:Number;

ns["onMetaData"] = function(obj) {
	duration = obj.duration;
}

function videoStatus() {
	amountLoaded = ns.bytesLoaded / ns.bytesTotal;
	loader.loadbar._widht = amountLoaded * 130.0;
	loader.scrub._x = ns.time / duration * 130.0;
}



var scrubInterval;

loader.scrub.onPress = function() {
	clearInterval(videoInterval);
	scrubInterval = setInterval(scrubit,10);
	this.startDrag(false,0,this._y,130,this._y);
}
	
loader.scrub.onRelease = loader.scrub.onReleaseOutside = function() {
	clearInterval(scrubInterval);
	videoInterval = setInterval(videoStatus,100);
	this.stopDrag();
}

function scrubit() {
	ns.seek(Math.floor((loader.scrub._x/130)*duration));
}


this.attachAudio(ns);
var snd = new Sound(this);

function setVol(v) {
	snd.setVolume(v);
}

function getVol() {
	return snd.getVolume();
}



var theMenu:ContextMenu = new ContextMenu();
theMenu.hideBuiltInItems();
_root.menu = theMenu;

var i1:ContextMenuItem = new ContextMenuItem(":::: Video Einstellungen ::::",trace);
theMenu.customItems[0] = i1;

var i2:ContextMenuItem = new ContextMenuItem("Play / Pause Video",pauseIt,true);
theMenu.customItems[1] = i2;

var i3:ContextMenuItem = new ContextMenuItem("Replay Video",replayIt);
theMenu.customItems[2] = i3;

var i4:ContextMenuItem = new ContextMenuItem("Copyright 2006 James.com",trace,true);
theMenu.customItems[3] = i4;

function pauseIt() {
	ns.pause();
}

function replayIt() {
	ns.seek(0);
}
Jedenfalls habe ich es geschafft, dass er mir sagt, wieviel Minuten:Sekunden der Film bereits läuft.

Allerdings, hat dieser Code auch dafür gesorgt.. dass mein Play-Button und mein Pause-Button nicht mehr funktionieren, sowie mein Loadbar, nicht mehr lädt und fortläuft.

Wenn ich es dragge, und hin - und herziehe, gibt er keine Reaktion von sich, nehme ich aber den Part raus, funktioniert alles wieder.

Ich kann leider den Fehler nicht lokalisieren.

Ich weiss nur, dass wenn ich diesen Part aus dem Code lösche, alles wieder Funktioniert.

Code:
//
stream_ns.onMetaData = function(infoObject:Object) {
    time_txt.text = infoObject.code;
};

var time_interval:Number = setInterval(checkTime, 500, stream_ns);
function checkTime(myVideo_ns:NetStream) {
    var ns_seconds:Number = myVideo_ns.time;
    var minutes:Number = Math.floor(ns_seconds/60);
    var seconds = Math.floor(ns_seconds%60);
        if (seconds<10) {
        seconds = ("0"+seconds);
}
    time_txt.text = minutes+":"+seconds;
}


Kann mir evtl. jemand sagen wie ich den Fehler beheben kann und wieso mein Play und Pause Button sowie mein Scrubber davon betroffen sind?

lieben Gruß..

Die Illy...


PS: Als Anhang habe ich mal mein Player geuppt, vielleicht wird ja einer davon schlauer ;)
 

Anhänge

Hmm,

ich muss zugeben, ich habe eher den Eindruck, dass dieser Code aus verschiedenen Vorlagen und Tutorials zusammenkopiert wurde, anstatt von Dir selbst geschrieben (sonst wären Dein Stream z.B. nicht abwechselnd "stream_ns" und "ns" benannt. Alles, was sich auf "ns" bezieht (z.B. Deine Buttonsteuerung oder die Funktion "scrubit"), wird keinen Effekt haben, da Dein Streamobjekt anders heisst:
Code:
var stream_ns:NetStream = new NetStream(connection_nc);

Mein Tipp: Gehe den Code nochmal durch, behebe solche Fehler und entferne doppelte Funktionen (es gibt z.B. eine Ereignisfunktion "onMetadata" für das Objekt "ns" und eine für "stream_ns" ...).

Gruß
.
 
Zurück