Toon posts:

[flashMX2004] preloaden van flv's

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig een flv-player te maken, waarmee ik meerdere flv's achter elkaar wil afspelen. Hiervoor maak ik voor iedere flv een eigen mc aan en bijbehorend object waarin ik alle parameters voor die video opsla.
Wanneer de eerste flv geheel is ingeladen maar wel nog aan het afspelen is, wil ik vast beginnen met het inladen van de de volgende flv. De enige methode die ik daarvoor heb kunnen vinden, is om voor die volgende flv gewoon ns.play() te doen, en op het moment dat ns.onStatus de code NetStream.Buffer.Full geeft die flv te pauzeren. dmv een flag isPaused houd ik bij of de betreffende flv speelt of gepauzeerd is.

Hierbij loop ik tegen twee problemen aan:
1. sommige flvs lijken NetStream.Buffer.Full niet te triggeren. (dit probleem ga ik nu maar omzeilen met het checken op ns.bytesTotal en ns.bytesLoaded)
2. bij het skippen naar een volgend filmpje lijkt er soms iets mis te gaan met de synchronisatie van mijn isPaused flag en de werkelijke play-status van de flv

Daarom heb ik drie vragen:
1. is dit een goede manier om flv's te preloaden?
2. weet iemand waaraan het niet triggeren van
NetStream.Buffer.Full kan liggen?
3. is er een methode om de huidige playstatus van een flv'tje op te vragen?

[ Voor 5% gewijzigd door Verwijderd op 21-10-2005 11:15 ]


Verwijderd

Topicstarter
zit hier wat te prutsen en ik ontdek een paar dingen:
1. ik gebruik NetStart.Play.Stop als trigger voor het starten van de volgende flv; NetStart.Play.Stop wordt echter af en toe op voor mij onduidelijke tijdstippen getriggerd. dat is dus geen goede methode.
2. de mbv ns["onMetaData"] verkregen duration van de flv is niet nauwkeurig. wanneer ik bij NetStart.Play.Stop ns.time en duration vergelijk, blijkt de time niet met de duration overeen te komen: in het ene geval is de grootste waarde die ns.time bereikt groter dan duration, in andere gevallen is ns.time kleiner dan duration.

ik ga het denk ik maar zoeken in een oplossing waarbij ik bij NetStream.Play.Stop kijk of ns.time erg dicht in de buurt zit van duration. Fraai is anders, maar mijn eerste kennismaking met flv leert me dat het nogal buggy is en erg slecht gedocumenteerd. :(

  • LB Back
  • Registratie: November 2004
  • Laatst online: 14-03 23:22
Kun je niet gewoon NetStream.bufferLength gebruiken icm duration (meta data)?
Ik probeer metadata wel eens te voorkomen omdat de klant bvb Squeeze gebruikt.

Of NetStream.bytesLoaded icm NetStream.bytesTotal?

Voorzover ik weet werkt NetStream.time alleen met FCS

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 25-03 10:55

XangadiX

trepanatie is zóó kinderachtig

er zijn inderdaad een aantal dingen waar je op moet letten; zo is het flv formaat als streaming formaat gebouwt (vandaar ook de netstream) en eigenlijk wil flash ze het liefst vanuit flashCom, doe je het op jouw manier dan lijkt het buggy omdat netstreams elkaar af en toe in de weg kunnen zitten (ongeveer het zelfde als dat de oude loadMovie in de weg kon gaan zitten als je er meer dan 10 tegelijk aanriep)

de vraag is dus ook of je iedere flv z'n eigen netstream object meegeeft?

Daarbij is 'duration' inderdaad metadata in flv 1.0 (is later opgelost) maar er zijn dus een boel flv bestanden die GEEN duration hebben. Dat kan lastig zijn.

Dan is er natuurlijk nog de vraag, waarom zou je al willen preloaden voordat de oude afgelopen is; de winst die je daarmee maakt is marginaal, aangezien flv al als streaming bedoeld is. Als je pas begint met laden op de trigger bespaar je jezelf niet alleen een boel koppijn, maar het wordt ook veel eenvoudiger omdat je maar 1 netstream object hebt (en maar 1 buffer en maar 1 loading MC) en de wachttijden op flv bestanden zijn echt niet lang, want streaming.

overigens kun je metadata als duration toevoegen met de metadata injector : http://www.buraks.com/flvmdi/

[ Voor 5% gewijzigd door XangadiX op 21-10-2005 15:25 ]

Stoer; Marduq


Verwijderd

Topicstarter
@LB Back: hoe bedoel je bufferLength gebruiken icm duration?
@XangadiX: is geef iedere flv zijn eigen NetStream object. wat betreft het waarom: als ik op een trage breedband verbinding kijk naar flv's van zo'n 4mb heb ik het idee dat er wel wat winst te behalen is. Toen ik overigens begon met dit idee had ik niet gedacht dat het zo tricky was. Over het ontbreken van metadata: wij gaan hier uitsluitend zelf nog aan te maken flv's gebruiken, waarschijnlijk gemaakt met cleaner icm met flash8. Dan hoef ik toch geen files zonder metadata meer te verwachten? Anders is die injector wel erg handig.