Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-12-2008, 11:01   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 6
onMetaData in OOP

Hallo zusammen!

Ich versuche gerade, einen Klasse für die Steuerung von Videos zu schreiben. Dabei soll eine Fortschrittsanzeige eingebaut sein, für die ich natürlich die Gesamtdauer des Videos haben muss. Dies kann man mit netstream.onMetaData auslesen, so viel weiss ich. Jetzt stellt mich das in der Klasse vor einige Probleme...ich kann die Metadaten zwar auslesen, aber nicht abspeichern:

Code:
class classes.VideoController
{
	var videoObj:Video;
	var netConnection:NetConnection;
	var netStream:NetStream;
	var videoDuration:Number;
	
	function VideoController(videoObject:Video){
		videoObj = videoObject;
		netConnection = new NetConnection();
		netConnection.connect(null);
		netStream = new NetStream(netConnection);
	
		netStream.onMetaData = function(infoObj:Object){
			videoDuration = infoObj["duration"];
			trace("Gesamtdauer: "+videoDuration);
		}		
		
		videoObj.attachVideo(netStream);
		netStream.setBufferTime(5);		
	}
videoDuration ist zwar da, wo ich es trace, bekannt, ausserhalb der Funktion aber undefined. Hat mir jemand einen Tipp, wie ich die Dauer abspeichern kann?
Asvari ist offline   Mit Zitat antworten
Alt 22-12-2008, 11:16   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
hi,
wo steht denn dein anderes trace das undefined ausgibt?
hört sich ein bissal nach einem timing prob an... evtl fragst du die var ab bevor onMetaData die var überhaupt setzen konnte?!

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 22-12-2008, 11:34   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 6
hier noch die gesamte Klasse bisher...

Code:
class classes.VideoController{

	var videoObj:Video;
	var netConnection:NetConnection;
	var netStream:NetStream;
	var videoDuration:Number;
	
	function VideoController(videoObject:Video){

		videoObj = videoObject;
		netConnection = new NetConnection();
		netConnection.connect(null);
		netStream = new NetStream(netConnection);
	
		netStream.onMetaData = function(infoObj:Object){
			videoDuration = infoObj["duration"];
			trace("Gesamtdauer: "+videoDuration);
		}
		statusAbfrage();

		videoObj.attachVideo(netStream);
		netStream.setBufferTime(5);		
	}
	
	public function playVideo(videoPath:String){
		trace("videoPath: "+videoPath);
		netStream.play(videoPath);
	}
	
	private function statusAbfrage(){
		trace("Gesamtdauer ausserhalb: "+videoDuration);
		
	}
}
Stimmt, das könnte das Problem sein... das trace in der statusAbfrage-Funktion kommt in der Ausgabe vor dem trace im Konstruktor. Wie kann ich sicherstellen, dass die MetaDaten schon vorhanden sind? Sind die vorhanden, sobald ich angefangen habe, ein Video abzuspielen?
Asvari ist offline   Mit Zitat antworten
Alt 22-12-2008, 12:03   #4 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
pack doch playVideo() und statusAbfrage() mit in die onMetaData function rein...
also die function aufrufe, nicht die functions/methoden selbst
cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!

Geändert von salazar (22-12-2008 um 12:08 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 22-12-2008, 12:14   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 6
Das geht leider nicht wirklich...Weil 1. die Funktion dort nicht bekannt ist und 2. muss ich playVideo immer wieder von aussen aufrufen können, um das Video zu wechseln.
Asvari ist offline   Mit Zitat antworten
Alt 22-12-2008, 12:19   #6 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
Zitat:
Zitat von Asvari Beitrag anzeigen
Das geht leider nicht wirklich...Weil 1. die Funktion dort nicht bekannt ist
mist. grad erst gesehen. ist ja as2
dann kannste das aber umgehen indem du den scope in einer var abspeicherst. dann kennt der auch deine functions

Zitat:
Zitat von Asvari Beitrag anzeigen
und 2. muss ich playVideo immer wieder von aussen aufrufen können, um das Video zu wechseln.
aber wenn du das video wechseln willst... ist dann da eh nicht ein kleiner denkfehler bei dir in der klasse?! wenn du jetzt ein anderes video abspielen willst hat das neue video doch auch eine andere duration?! von demher mußte dir ja eh bei jedem neuen video auch eine neue duration holen?!

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 22-12-2008, 12:25   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 6
Damit habe ich noch so meine Probleme...wie kann ich den Scope in einer Variable abspeichern? Für solche Probleme habe ich bisher Delegate verwendet, aber das hilft leider nicht überall weiter...

Das mit dem Denkfehler ist richtig, primär gings mir erstmal darum die duration zu bekommen, aber natürlech darf das dann nicht im Kontruktor sein...ich hab das jetzt in die playVideo Funktion verschoben.
Asvari ist offline   Mit Zitat antworten
Alt 22-12-2008, 12:30   #8 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
so sollte das klappen mit dem scope.
als bsp.:
PHP-Code:
function VideoController(videoObject:Video){
    
    var 
scope this;

    
videoObj videoObject;
    
netConnection = new NetConnection();
    
netConnection.connect(null);
    
netStream = new NetStream(netConnection);

    
netStream.onMetaData = function(infoObj:Object){
        
scope.videoDuration infoObj["duration"];
        
scope.statusAbfrage();
    }

    
videoObj.attachVideo(netStream);
    
netStream.setBufferTime(5);        
    

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!

Geändert von salazar (22-12-2008 um 12:33 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 22-12-2008, 13:06   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 6
das will nicht so recht...

Code:
class classes.VideoController
{
	var videoObj:Video;
	var netConnection:NetConnection;
	var netStream:NetStream;
	var videoDuration:Number;
	var scope:Object;
	
	function VideoController(videoObject:Video)
	{
		trace(this);
		scope = this;
		videoObj = videoObject;
		netConnection = new NetConnection();
		netConnection.connect(null);
		netStream = new NetStream(netConnection);
		
		videoObj.attachVideo(netStream);
		netStream.setBufferTime(5);		
	}
	
	public function playVideo(videoPath:String){
		trace("videoPath: "+videoPath);
		netStream.play(videoPath);
		netStream.onMetaData = function(infoObj:Object){
			scope.videoDuration = infoObj["duration"];
			
			trace("videoduration: "+scope.videoDuration);
			scope.statusAbfrage(infoObj["duration"]);
			//trace("Gesamtdauer: "+videoDuration);
			
		}
	}
	
	private function statusAbfrage(duration:Number){
		trace("Gesamtdauer ausserhalb: "+duration);
		
	}
}
Die Funktion statusAbfrage wird nicht ausgelöst und die Zuweisung zu scope.videoDuration funtkioniert auch nicht...
Asvari ist offline   Mit Zitat antworten
Alt 22-12-2008, 14:07   #10 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
ja nee. jetzt ist das ganze nach deinem umbau auch an der falschen stelle!

PHP-Code:
public function playVideo(videoPath:String){
    var 
scope this;
    
trace("videoPath: "+videoPath);
    
netStream.play(videoPath);
    
netStream.onMetaData = function(infoObj:Object){
        
scope.videoDuration infoObj["duration"];
        
trace("videoduration: "+scope.videoDuration);
        
scope.statusAbfrage(infoObj["duration"]);
        
//trace("Gesamtdauer: "+videoDuration);
    
}

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 22-12-2008, 14:49   #11 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 6
ah so war das gemeint tausend Dank, endlich klappts
Asvari ist offline   Mit Zitat antworten
Alt 22-12-2008, 14:50   #12 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
Thumbs up

na bitte, geht doch
viel spaß noch,
cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele