# JavaFX und RTSP



## algorismi (12. Nov 2009)

Hallo Leute,

kann mir einer aus seiner Erfahrung sagen, ob JavaFX das RTSP-Protokoll unterstützt oder nicht?



danke im voraus
Algorismi


----------



## tuxedo (12. Nov 2009)

Bei Onkel Google warst du noch nicht, oder? 

--> Let me google that for you


----------



## algorismi (12. Nov 2009)

tuxedo hat gesagt.:


> Bei Onkel Google warst du noch nicht, oder?
> 
> --> Let me google that for you



Bei Onkel Google habe ich als aller ersten nachgefragt.
Und laut Sun wird das RTSP-Protokoll auch unterstützt, bloß habe ich kein Erfolg damit.
Habe gehofft hier jemanden zu finden der bereits Erfahrung gemacht hat damit.


----------



## tuxedo (12. Nov 2009)

Deine Frage war:



> kann mir einer aus seiner Erfahrung sagen, ob JavaFX das RTSP-Protokoll unterstützt oder nicht?



Das impliziert das du keinen Schimmer hast ob JavaFX RTSP beherscht oder nicht. 

Wieso stellst du Fragen auf die du schon eine Antwort hast und lässt Fragen, auf die du keine Antwort hast weg?! :autsch:

Warum frägst du nicht einfach: "Hat hier jemand RTSP schonmal erfolgreich mit JavaFX benutzt und kann mir nen Tipp geben wie ich das am besten mache?" ??? ???:L ???:L


----------



## algorismi (12. Nov 2009)

OK gut dann stelle ich mal meine Frage anders.

Hat hier jemand RTSP schonmal erfolgreich mit JavaFX benutzt und kann mir nen Tipp geben wie ich das am besten mache?


----------



## algorismi (16. Nov 2009)

Hatte bis keiner Erfolg?


----------



## tuxedo (16. Nov 2009)

Vielleicht hat's keiner probiert?

- Alex


----------



## algorismi (17. Nov 2009)

OK dann mal anders gefragt,

kann man mir jemand sagen, wie ich in Java (nicht JavaFX) per RTSP stream Videos auf einer Swing-Komponente darstellen kann?
Hat da jemand schon Erfahrung sammeln können?


----------



## tuxedo (17. Nov 2009)

Folgende Schlagworte kann ich dir dazu nennen:

1) JMF
2) FMJ
3) VLC Java Bindings
4) SWT-Ole-Bridge und damit das WindowMediaPlayer ActiveX ansteuern

Die ersten beiden: Da bin ich kein Befürworter... Aufwendig, Komplex, erfodert u.U. manuelle Schritte des Users
Zu 3): Das ist ne feine Sache. Aber auch nicht allzueinfach. Geht dafür aber mit jedem von VLC unterstützten OS

zu 4) Ja, das ist schon fast was für Freaks. Benutzen das aber auch hier in der Firma mit eigenen ActiveX Controls. Im fall von WMP brauchst du natürlich einen DirectShow Filtertreiber der RTSP kann.

Alles in allem: Kein leichtes unterfangen.

- Alex


----------



## Kr0e (19. Nov 2009)

Hallo algorismi,

sowohl die Implementierung von Sun (JMF) als auch die von FMJ ist Mist.
Generell ist zu sagen dass RTP Lösungen sich als sehr schwierig erweisen.

Ich habs ganz einfahc gemacht und funktioniert tadellos!

Gut aufgepasst:

JMF hat einen sehr netten Vorteil! Es spielt Dateien ab, die nicht vollständig sind. (Ergo JMF führt keinen Checksumtest durch wie z.b. die OS Codecs)

Übertrage einfach ne Datei auf die altmodische Art! Sockets usw (Kannst auch MINA oder ähnliche Frameworks nehmen!) 
Sobald du in deiner Datei seek'st musst du im Hintergrund veranlassen dass die neue Position geladen wird! Nimm einfach eine RandomAccessFile! Dann lädste nicht umsonst! Wenn du fertig bist, hast du eine vollständige Videodatei! Die Technik nennt sich übrigens Video-On-Demand und ist die am weitverbreiteste Lösung (Youtube usw) RTP ist ansich nur bei livestreams sinnvoll...

Ich weiß leider nicht was du machen willst, von daher nehm ich mal an es handelt sich um eine Datei und nicht um einen Livestream!

Gruß Chris

PS: Du kannst diese lösung dann als jar packen und aus deinem JavaFX Programm aufrufen... Garkein Problem! JavaFx ist praktisch das selbe auf niedriger Ebene


----------



## algorismi (22. Nov 2009)

Hi Kr0e,

naja es soll sich um eine Anwendung handeln, die sowohl Video-Dateien, als auch livestreams abspielen soll.
Bei Video-Dateien gibt es kein Porbleme (Video On Demand), diese abzuspielen.
Das hauptptoblem ist eben das mit dem livestream.

Werde mir mal mich mit deiner Variante mal etwas genauer beschäftigen.

Gruß
Algorismi


----------



## tuxedo (23. Nov 2009)

Video-On-Demand == unvollständiges Dateispeichern und gleichzeitig abspielen? Sorry, aber: :lol:

Stream ist Stream. Ob er nun partiell über eine lokale, unvollständige Datei gepuffert wird, oder ob die Daten via RTSP eingehen und in einem Puffer im Speicher zwischengelagert bevor sie gerendert werden... Da gibts keinen wirklichen Unterschied. Ist eine Frage des Protokolls. Mehr nicht. 

"livestream". Definiere mal "live"... ?! Ich kann mit VLC auch eine Datei streamen ohne RTSP einzusetzen. Ist das dann "live video-on-demand"?

RTSP wird überall da eingesetzt wo es um echtzeit Streaming von Informationen geht. Hauptanwendungsgebiet ist hierbei Audio und/oder Video. Ob "live" oder "nicht live" spielt dabei keine Rolle. 

Angenommen du verwendest einfache Sockets und streamst die Daten selbst (TCP?):

Wenn sich da ein Paket verzögert, verzögert sich alles. Die Gesamte übertragung wird ausgebremst. Jeder Empfänger sieht das Video mit seinem eigenen, variierendem Zeitversatz.

RTSP greift da ein, wirft einzelne Frames weg und stellt so sicher, dass bei allen Empfängern nahezu das gleiche Bild zu sehen ist (leichter versatz ist durch Puffern verursacht). 

Kann wie gesagt nur zu VLC über die Java-Bindungs raten. Oder eben das VLC ActiveX via SWT-Ole-Bridge ansteuern...


----------



## Kr0e (23. Nov 2009)

@Tuxedo:

Tut mir Leid, du hast leider nicht ganz Recht. Es gibt da einen gewaltigen Unterscheid. RTSP ist dafür ausgelegt Video in Echtzeit zu übermitteln (Wie du ja schon ganz richtig geschrieben hast -> Zeitversatz usw.). Stichwort UDP (Datenverlust). Aus einem RTSP kann man keine Datei wieder erzeugen  Zumindest hat man dann nicht mehr das Original. Und über JMF oder auch FMJ das RTP zu benutzen, ist leichter gesagt als getan. JMF z.b. benutzt Codecs um das Video herunter zu "schrauben" (Von der Qualität) Zeig mir mal ein Video mit HD 720p. Codec via RTP und JMF  Viel Spaß...

Da gibt es sehr wohl einen Unterschied (Video on demand != Livestream) 

Mfg Chris

PS: Du räts zu VLC Bindings für Java. Schick doch direkt mal einen Link. Soweit ich weiß, ist das Projekt down... Wenn es nicht so ist, wäre ich sehr erfreut... Ich könnte das gut in meinem 3D OpenGL Projekt benutzen, die JMC von SUN sind eher in einem Beta-Stadium ... Achja, JVLC ist GPL nicht LGPL... Sollte man noch erwähnen ...


----------



## HoaX (24. Nov 2009)

Kr0e hat gesagt.:


> @Tuxedo:
> 
> Tut mir Leid, du hast leider nicht ganz Recht. Es gibt da einen gewaltigen Unterscheid. RTSP ist dafür ausgelegt Video in Echtzeit zu übermitteln (Wie du ja schon ganz richtig geschrieben hast -> Zeitversatz usw.). Stichwort UDP (Datenverlust). Aus einem RTSP kann man keine Datei wieder erzeugen  Zumindest hat man dann nicht mehr das Original. Und über JMF oder auch FMJ das RTP zu benutzen, ist leichter gesagt als getan. JMF z.b. benutzt Codecs um das Video herunter zu "schrauben" (Von der Qualität) Zeig mir mal ein Video mit HD 720p. Codec via RTP und JMF  Viel Spaß...
> 
> Da gibt es sehr wohl einen Unterschied (Video on demand != Livestream)



RTSP kümmert sich nur um die Steuerung, ob die Daten aus einer Live-Quelle stammen oder einer Datei ist wurst. Das Format in dem die Daten übertragen werden ist völlig unabhängig, du kannst auch ein PDF mit RTSP streamen wenn du lustig bist. Wie du darauf kommst dass man aus einem RTSP-Stream keine Datei herstellen kann ist mir sehr rätselhaft.

Dass RTSP super mit JMF laufen soll hat tuxedo doch nirgends behauptet!? (Oder ich habs überlesen). Er hat nur gesagt womit es gut funktioniert, wozu die Aufregung?

Edith sagt: RFC 2326 - Real Time Streaming Protocol (RTSP) wenn du noch Fragen dazu hast 
Btw: Wenn RTSP für Live(!)-Streams entworfen wurde, wieso erlaubt es dann dem PLAY-Kommando einen Range-Parameter für die Position des Streams mitzugeben?


----------



## Kr0e (24. Nov 2009)

Hmm, ihr habt mich überzeugt. Tut mir Leid für Anschuldigungen. Ich war echt der Meinung, dass das so ist....
Aber ok, man lernt nie aus. Ich kam darauf, weil ich das mit JMF porbiert habe und dabei bin ich auf das Problem gestoßen, dass die Videos beim streamen heruntercodiert werden. Hab da wohl zu schnell a und b zusammen addiert  Nun gut... 


Gruß Chris


----------



## tuxedo (25. Nov 2009)

Kr0e hat gesagt.:


> Aber ok, man lernt nie aus. Ich kam darauf, weil ich das mit JMF porbiert habe und dabei bin ich auf das Problem gestoßen, dass die Videos beim streamen heruntercodiert werden. Hab da wohl zu schnell a und b zusammen addiert  Nun gut...



RTSP hat nix mit dem Encoding der Videos zu tun. RTSP ist ja nur der "transportcontainer" wenn man so will.

HD Videos lassen sich damit natürlich auch übertragen. Die Auflösung spielt da keine Rolle. Ergo: Auch > 1080p ist problemlos möglich.

Zum "Datei herstellen" oder "Aufzeichnen":

Nun. Wenn man mit RTSP ein Video streamt und auf einem anderen Rechner wieder aufnimmt, kann es durchaus sein dass beides nicht "identisch" ist. RTSP steuer eben den Fluss der Daten. Und wenn ein Frame zu spät eintrifft, dann wird er eben gedroppt. Du kannst also das Video nur so gut aufnehmen wie du es NACH RTSP bekommst (also exklusive der gedroppten Frames).

Alles andere würde bedeuten dass du direkt in RTSP eingreifen musst und nicht in Echtzeit aufnehmen kann. Von den "unterwegs verloren gegangenen Frames" mal ganz zu schweigen.

- Alex


----------

