• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-07-2010, 17:21   #1 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 5.626
Question netStream.time "ruckelt" ?!

Hallo zusammen!

Ich versuche gerade eine framebasierende Animation (die ich aber interpolieren kann) mit ein extern geladen Video zu synchronisieren und bin dabei auf folgendes Problem gestoßen:

Obwohl das Video ohne sichtbaren Ruckler abgespielt wird, scheint der in netStream.time gespeicherter Time-Code "zu ruckeln". Er bleibt immer wieder für eine gewisse Zeit stehen.

Ich habe hier mal die durch getTimer() ermittelten Werte dagegengesetzt um den Effekt zu verdeutlichen:
Code:
stream	| getTimer/1000	| differenz
---------------------------------------------
...
28.459	| 60.79		| -32.331
28.501	| 60.829	| -32.328
28.501	| 60.869	| -32.367999999999995
28.544	| 60.909	| -32.364999999999995
28.587	| 60.949	| -32.361999999999995
28.651	| 60.989	| -32.337999999999994
28.693	| 61.029	| -32.336
28.736	| 61.069	| -32.333
28.779	| 61.109	| -32.33
28.779	| 61.149	| -32.370000000000005
28.779	| 61.189	| -32.41
28.885	| 61.246	| -32.361000000000004
28.885	| 61.27		| -32.385000000000005
28.971	| 61.309	| -32.337999999999994
29.013	| 61.349	| -32.336
...
Kennt jemand dieses Problem? Kann man es irgendwie umgehen? Könnte es an dem Video selbst liegen?

Ich wäre Euch für jeden Tipp dankbar!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (15-07-2010 um 17:27 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 15-07-2010, 18:30   #2 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
hi martin,

nur so eine vermutung: du gibst onEnterFrame aus?
veränder mal die fps deiner fla

mfg

sx
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 15-07-2010, 18:47   #3 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 5.626
Daran liegt's leider nicht. Meine Framerate ist 25 (genauso wie die des Videos); ich hab's aber auch schon mit 50 oder 60 versucht. Leider ändert das alles nichts, weil netStream.time kein kontinuierliches Zeitsignal zu geben scheint, während das Video läuft.

Auch ein Performance-Ruckeln kann es eigentlich nicht sein, da das Video flüssig läuft und getTimer() und netStrem.time eigentlich unabhängig davon sein sollten.

Gibt es vielleicht noch eine andere Methode, an den Timecode des Videos zu kommen?
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 15-07-2010, 19:06   #4 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
also ich weiß ehrlich gesagt nicht, ob der timecode ganz exakt ausgegeben wird. wollte damit eigentlich nur darauf hindeuten, dass die frames der bühne und die des videos überhaupt nix miteinander zu tun haben. du kannst bspw. die fps der stage auf 1 stellen und das video läuft trotzdem flüssig. sogesehen kann es immer wieder sein, dass du frames des videos verpasst, oder aber mehrfach bei onenterframe siehst.

ich glaube nicht, dass man die beiden vollkommen synchron bekommt. ich würde die fps der stage möglichst hochstellen und nur bei bedarf (anderer timecode) die bühne aktualisieren.
bzw. man könnte ja auch mit einem timer oder interval abfragen ob sich der timecode geändert hat.

mfg

sx

edit: ach jetzt - ne er gibt es nicht aktuell, sondern videoFrameWeise... das mein ich
__________________

flintfabrik.de
shin10 ist offline   Mit Zitat antworten
Alt 16-07-2010, 14:30   #5 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 5.626
@shin10: Mir ist schon klar, dass die Framerate eines Videos von der Framerate der übrigenen swf abgekoppelt ist. Das ist aber nicht das Problem, da ich die Animation wie gesagt per Script interpoliere und so den passenden Zustand für jeden Zeitpunkt herstellen kann.

Dafür brauch ich aber ein verlässliches Zeitsignal. Und das hab ich leider nicht, wenn die time-Property eines kontinuierlich ablaufenden NetStreams zu 3 verschiedenen Zeitpunkten denselben Wert hat (s.o.).
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (16-07-2010 um 14:31 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 16-07-2010, 15:33   #6 (permalink)
BenutzerID: 436
 
Benutzerbild von Sebastian S.
 
Registriert seit: Jun 2001
Ort: Ruhrgebiet
Beiträge: 2.332
Kann das sein, dass der nur die Zeiten der Keyframes ausgibt?
Du kannst ja auch nur die Keyframes anspringen, wenn du mit seek auf der Videozeitleiste unterwegs bist.
__________________
Showreel 2011 | expert.ch | Provinzial - Kompetenz Kiel | ElectronicPartner | Vodafone 553
Wir suchen PHP-, iOS- und Androidentwickler, Screendesigner und AfterEffects & 3D Artists!
Sebastian S. ist offline   Mit Zitat antworten
Alt 18-07-2010, 00:46   #7 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.114
Jau - ist auch meine Vermutung. Es wird der nächstliegenste Keyframe-TimeCode ausgegeben.
Versuch doch mal, beim Konvertieren/Erzeugen der Videodateien den Keyframeinterval auf 1 zu stellen.

Ich hab ns.time mal mit einem Timer alle 100ms ausgeben lassen und nach ca.10 sekunden tauchten zumindest keine gleichen werte mehr auf, sondern zumindest immer ansteigend...

Wieviel Asynchronität wäre denn noch tolerabel?

Je nachdem könntest z.B. alle 2 sec einen cuepoint setzen und den dann direkt anspringen bzw. kontrollieren ob alles noch synchron läuft

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 18-07-2010, 02:57   #8 (permalink)
q00bar @ work
 
Benutzerbild von LilaQ
 
Registriert seit: May 2010
Beiträge: 88
Wollt grad das gleiche schreiben - ich würde da die Keyframerate beim rendern erhöhen, vllt. sogar am besten in jedes Frame rein.

Konnte so in meinem letzten Projekt auch das "Haken" des netVideoStreams beheben.

Sollte einen Versuch wert sein.

Mfg
LilaQ
LilaQ ist offline   Mit Zitat antworten
Alt 18-07-2010, 13:33   #9 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 5.626
Danke für den Tip mit dem Keyframeinterval. Könnte mir durchaus vorstellen, dass es etwas bringt, wenn man mit deutlich mehr Keyframes zu arbeiten. Allerdings würde das auch die Datenrate erhöhen und/oder die Video-Qualität veringern. Da beides in diesem Projekt schon ziemlich am Anschlag ist, steht das für den Kunden aber leider nicht zur Diskussion..

Die Qualität ist übrigens auch der Grund, weshalb es ein h264/mp4 sein muss, dass laut Flash nicht für die Einbettung in eine swf geeignet ist. Eine Synchronisierung über die Zeitleiste scheidet also auch aus...

Aber ich habe mittlerweile auch einen Workaround gefunden, der ganz gut funktioniert:

Ich synchronisiere die Animation nicht direkt mit dem Video-Timecode sondern mit einem geglätten Timecode, der die Aussetzer ausbügelt. Diesen setz ich nur dann hart auf stream.time, wenn eine gewisse Abweichungstoleranz überschritten wird (.9 Sekunden), ansonsten wird er entsprechen der seit der letzten Aktualisierung vergangenen Zeit (getTimer()) hochgezählt.

Das schließt einzelne Ruckler zwar nicht ganz aus, minimiert sie jedoch erheblich und sorgt so für eine glatte Animation...

Auch wenn mein akutes Problem damit gelöst ist, interessiert es mich auch weiterhin...
  • wie es zu den Aussetzern im Timecode kommt?
  • ob der Timecode durchgängig in den Videodaten gespeichert ist?
  • oder eben nur in den Keyframes?
  • und wie in diesem Fall die Zwischenbereiche errechnet werden?

Nochmal vielen Dank an alle, die mir hier weitergeholfen haben!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 18-07-2010, 17:43   #10 (permalink)
q00bar @ work
 
Benutzerbild von LilaQ
 
Registriert seit: May 2010
Beiträge: 88
Ich kann nur aus eigener Erfahrung heraus sagen, dass z.Bsp. auch .seek(), was ja laut Manual auch gerne mit Millisekunden arbeitet, immer nur zum nächstgelegenen Keyframe springt.

Ist für eine Arbeit bei der man ein sehr genaues / framebasiertes Anspringen eines Videos benötigt, sehr unvorteilhaft, weil man dann halt gezwungen wäre, die Keyframes im Video zu erhöhen.

Die Zwischenbereiche sollte sich in dem Fall einfach durch die Laufzeitlänge des Videos und das eingestellte Keyframeintervall berechnen lassen.

Mfg
LilaQ
LilaQ ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
netstream, ruckelt, time, timecode, video

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 "findet" ondemand Video nicht? Cookie Monster Flex programmieren 0 20-10-2008 11:56
"NetStream.Buffer.Empty" obwohl flv normal abspielt menonerd Flash 8 0 16-06-2008 10:26
Hintergrund "ruckelt" obwhol die Frame zahl > 30 ist eLem3ntx ActionScript 1 3 01-06-2008 23:18
Wo ist find ich die Leiste mit "Normal", "Darüber", "Gedrückt" und "Aktiv" maggi198 Flash Einsteiger 2 19-10-2006 22:33
AS "just in time" in einem .fla suchen/ändern BlessedSoftware Flash Entwicklungsumgebung erweitern 0 16-06-2004 23:18


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele