Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-02-2012, 09:21   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Netstream time

Hi,

ich bräuchte mal kurz Hilfe bei der time Eigenschaft des Netstreams...

Meine Funktion ist

ActionScript:
  1. public function changePath( path:String ):void
  2.         {
  3.             // Saves the current Position
  4.             var currentPos:Number = this._ns.time;
  5.             // Kill current NetStream
  6.             this._ns.removeEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
  7.             this._ns.close();
  8.             this._ns = null;
  9.            
  10.            
  11.            
  12.             this._ns = new NetStream( this._nc );   
  13.             this.attachNetStream( this._ns );
  14.             // init new netstream
  15.             this._ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus)
  16.             this._ns.play( path );
  17.             this._ns.seek(currentPos);
  18.         }

Das Problem ist, dass das Ganze nur beim 1. funktioniert... die "time" Eigenschaft ist dann immer wieder fast gleich, sodass das Video immer dahin zurück springt, wo ich e sbeim ersten Mal geändert habe... Jemand eine Idee?
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 03-02-2012, 09:29   #2 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.229
Hallo Nico,

ich denke, es liegt daran, daß die time des alten videos u.U. größer ist,
als die bereits vorgeladene Zeit des neuen Videos. Dann kannst Du den Zeitpunkt/Frame noch nicht anspringen -
umständlich gesagt, aber du verstehst was ich meine?

Du müßtest die bufferTime üfr das neue Video mindestens so hoch setzen wie die anzuspringende Zeit und wenn dann der Buffer voll ist (netStatus.-Event) die Zielzeit anspringen.

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 03-02-2012, 09:39   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Hi,

ich weiß, wie Du das meinst, haste da evtl. nen Code Beispiel zu? Bin mir da gerade nicht ganz sicher vom Ablauf her.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 03-02-2012, 09:57   #4 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.229
SRY, hab keine Zeit - heute abend aber, da mach ich ein Bsp fertig, falls das Problem noch besteht -

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 03-02-2012, 10:03   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Ja wäre super - besteht nämlich noch... :/

Hätte jetzt die buffertime per hand auf den Wert des alten Videos gesetzt, dami er so lange wartet, wie er springen muss. ABer klappen tut das leider nicht^^
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 05-02-2012, 02:12   #6 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.229
hi, hatte viel zu tun...

ALso hier mal ein Ansatz:
PHP-Code:
const VIDEO_PATH:String "videos/";
var 
videoUrls:Array=["vid1.flv","vid2.f4v","vid3.flv","vid4.f4v"];
var 
currentVideo:int=-1;
var 
globalVideoTime:Number 0;
var 
isBuffering:Boolean true;

var 
cont:Sprite = new Sprite();
var 
vid:Video = new Video();
var 
nc:NetConnection = new NetConnection(); 
nc.connect(null);

var 
ns:NetStream = new NetStream(nc); 

vid.attachNetStream(ns); 
cont.addChild(vid);
addChild(cont);

var 
statusText:TextField = new TextField();
statusText.background=0xffffff;
statusText.multiline=false;
statusText.height=20;
addChild(statusText);

ns.addEventListener(AsyncErrorEvent.ASYNC_ERRORasyncErrorHandler);
ns.addEventListener("netStatus",netStatusHandler);
cont.addEventListener(MouseEvent.CLICKnextVideo);
addEventListener(Event.ENTER_FRAMEupdateVideoStatus);
function 
asyncErrorHandler(event:AsyncErrorEvent):void 

    
// Mach nüscht!
}
function 
updateVideoStatus(e:Event):void{
    
statusText.htmlText ns.time.toString();    
}
function 
netStatusHandler(e:NetStatusEvent):void{
  switch (
e.info.code){
    case 
"NetStream.Play.Start":
        
trace("netstream started to play");
        
isBuffering=true;
    break;
    case 
"NetStream.Buffer.Full":
        
trace("netstream buffer full");
        if(
isBuffering){
            
ns.seek(globalVideoTime);
            
isBuffering=false;
        };
    break;
  } 
}
function 
nextVideo(e:MouseEvent null):void{
    
globalVideoTime ns.time;
    
currentVideo += currentVideo<videoUrls.length-: -currentVideo;
    
ns.bufferTime globalVideoTime;    
    
ns.play(VIDEO_PATH videoUrls[currentVideo]);
}

nextVideo(); 
Beim Klick aufs Video lädt das nächste. Dafür setzte ich die buffertime so hoch,
wie weit das alte Video bereits gespielt war und merke mir die aktuelle Zeit. Wenn der Buffer dann voll ist, führe ich ein seek() auf den zuvor abgespeicherten Zeitpunkt aus.

Das Beispiel verdeutlicht nur das Prinzip. Fallen sind noch:
  • Ungleich lange videos
  • unterschiedliche frameraten
  • unterschiedliche Bitraten
  • ...

Wenn Du red5 oder FMS verwendest, kannst Du den Stream ab dem konkreten Zeitpunkt anfordern,
sprich: dann würde man das einfacher lösen können.

Was genau hast Du vor? Wie groß sind die Videodateien?

Wenn es zum Beispiel um unterschiedliche Perspektiven ein und derselben Szenerie ginge und es sich um kleine Videos handelte,
könnte man vllt sogar alle videos übereinander parallel abspielen und mit visible das benötigte sichtbar machen und den Rest verbergen...

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.

Geändert von andrelehnert (05-02-2012 um 02:14 Uhr)
andrelehnert ist offline   Mit Zitat antworten
Alt 05-02-2012, 10:26   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Hi,

danke für Dein Beispiel! Werd es wohl erst morgen testen können...


Es geht darum, dass ich eine Anwendung baue, in der mehrere Videos vorhanden sind. Jetzt soll man zwischen 3 Qualitäten wechseln können - daher das neuladen der Videos an der gleichen Stelle.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 05-02-2012, 12:16   #8 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.229
dann scheidet die Variante mit dem Übereinanderlegen auf jeden Fall aus.

Beim FMS oder red5 wäre die dynamische Bandbreitenwahl auch schon integriert...

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 05-02-2012, 13:39   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Hi,

danke für den TIpp.


Ist nur ne Kleinigkeit auf einer Website, ein extra Server für die Videos wäre also etwas to much.

Evtl. werde ich das Ding dann eben einfach neustarten lassen. Mal sehen was das morgen gibt ... ;-)


dange
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
netStream.time "ruckelt" ?! Martin Kraft ActionScript 3 9 18-07-2010 16:43
netStream.time hinkt bei seek() um einen Keyframeabstand hinterher cellinger ActionScript 3 2 09-09-2009 06:19
netStream.time bei live stream leif Flash Media Server 1 04-04-2007 19:56
netstream.time liefert komische werte Rudi Ratlos Flash Media Server 0 08-11-2005 15:30
netStream.time gibt nicht die aktuelle Abspielposition aus, oder? meira Flash MX 2004 0 11-07-2005 23:35


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele