# Webcamchat JMF RMI oä



## LilMartini (17. Jul 2010)

Hallo liebe Leute

Ich habe folgendes Problem:
Ich möchte eine Anwendung programmieren in der sich ein Benutzer einen Client von mir runterläd, sich dann mit seinen Daten einloggen kann und dann einen Webcamchat starten kann. Sobald sich die Person eingeloggt hat, können andere aus ihrem Client oder von meiner Communitywebsite aus sehen, dass die Person ihre Cam zeigt.
Mein eigentliches Problem ist die Art und Weise wie ich dem Client die Möglichkeit gebe, mit der Webcam des PCs umzugehen und dieses Video dann in guter Qualität über das Inet an meinen Server zu senden und der Server soll dann seinerseits das Bild an die anderen Chatter weiterleiten.
Es gibt ja die Möglichkeit das mit dem JMF zu machen. Da habe ich aber gelesen, dass es keine Version für 64Bit Systeme gibt. Der CLient sollte aber zu mindest auf alles WIndows Versionen laufen; egal ob 32 oder 64 Bit.
Vielleicht hab ich da ja auch etwas falsches gelesen. Ich würde mich sehr über Anregungen freuen welche Techniken ich am Besten zur Umsetzung meiner Idee nutzen sollte. Interessant wäre auch ob ihr mir empfehlen würdet RMI für die Chatfunktion zu benutzen oder was man da sonst so nehmen könnte.

Liebe Grüße!

Martin


----------



## tuxedo (18. Jul 2010)

JMF ist sogut wie tot.. Aber wie sagt man so schön: Totgesagte leben länger.

Alternativ zu JMF gibt es noch die freie alternative FMJ ...
Du könntest auch mal schauen wie weit du mit JMC aus den JavaFX Paket kommst.

Alles in allem: Webcam in Java ist nicht ohne. 

RMI zum Videostreaming -> keine gute Idee
Für den Chat an sich ist's aber okay. Alternativen gibts genug: Spring RPC, SIMON, ....
Oder selbst basteln mit MINA, Netty, xSocket oder oder oder

Vielleicht solltest du klein anfangen und erstmal die Sache mit dem Chat meistern ?!

- Alex


----------



## LilMartini (18. Jul 2010)

Hey

Ich habe mit RMI schonmal angeguckt. Die Textchatfunktion sollte in RMI kein Problem sein. Lohnt sich der Aufwand, sich noch ein anderes Framework wie zum Beispiel Spring RPC anzugucken? Was kann man da besser machen?

Zum Thema Webcam:
Das JMF fast tot ist, habe ich schon gelesen. Gibt es noch andere Alternativen ausser FMJ? 
Die Darstellung der Webcam soll im Browser passieren. Habt ihr da vielleicht Vorschläge, wie man das ganze Prinzip umsetzen könnte?

Vielen Dank im Voraus


----------



## Kr0e (18. Jul 2010)

Hi, ja gibt es ne Menge Alternativen, die wunderbar funktionieren.

Speziel für Webcam würde ich Xuggler empfehlen oder vlt. sogar GStreamer-Java (Sehr performante Videodekodierung und Visualisierung jeglicher Art).

Für die Übertragung ganz klar Netty3 (IMHO bisher bei weitem das beste Java NIO Framework).

Lass die Finger von .... JMF! Damit hast du nur Ärger!

FMJ ist auch ne gute Lösung aber um einiges komplizierter und anwenderunfreundlicher.
Xuggler und GStreamer-Java sind schon die besten Möglichkeiten.

Viel Erfolg weiterhin.

Gruß,

Chris


----------



## tuxedo (19. Jul 2010)

GStreamer ist wohl mit Windows nicht ganz so easy wie mit Linux... (nur so nebenbei).

Für Windows gibts noch die propritäre, aber kostenlose Lösung DirectShow Java Wrapper: humatic - dsj ... Das setzt direkt auf DirectShow auf. Und damit lässt sich eigentlich alles was Multimedia angeht lösen.


----------



## LilMartini (19. Jul 2010)

Hey
Netty3 und Xuggle sehen ja ganz interessant aus, aber damit kann ich doch keine Webcam ansprechen oder? 

Nochmal kurz und knapp was ich möchte:

Chatter 1 -> Webcam -> Client -> Server -> Bild auf meine Homepage

Der Benutzer auf meiner Homepage soll nicht die Cam anmachen können. Das ganz soll eine Art Livestream für Kochwettbewerbe machen. Man soll dem Koch zugucken können und mit anderen im Chat schreiben können. Die Darstellung und der Chat sollen für den Benutzer nur auf der Homepage passieren und der Koch soll einen Laptop oder ähnliches da bei sich haben, da kommt eine Cam ran, er startet seine Clientsoftware und beginnt das Bild seiner Cam an meinen Server zu schicken und meine Server schickt es dann auf meine Homepage bzw halt an alle, die sich das angucken wollen. Ich glaube jetzt ist klarer was ich machen möchte

Grüße


----------



## tuxedo (19. Jul 2010)

DSJ scheinst du irgendwie ignoriert zu haben?!


----------



## LilMartini (19. Jul 2010)

Da hast du Recht... Das sieht wirklich sehr interessant aus! Das werde ich mir mal angucken. 

Danke!


----------



## tuxedo (19. Jul 2010)

Sei dir aber bewusst, dass das eine "Windows Only" Lösung ist. Für kommerzielle Projekte musst du eine Lizenz kaufen. Ein Preis steht auf der Seite nicht. Muss man erfragen.


----------



## LilMartini (19. Jul 2010)

Windows Only ist kein Problem und die Software wird nich kommerziel vertrieben oder so... Die Nutzung des Clients ist kostenlos... Wie kommt es, dass ich trotz ausgibiger Recherche noch nie etwas von DSJ gelesen habe. Gibt dazu alternativen für den Fall, dass ich sowas auch mal im kommerziellen Umfeld nutzen möchte?


----------



## tuxedo (19. Jul 2010)

Hab auch lange suchen müssen bis ich was gefunden hatte. Damals waren meine suchbegriffe dann aber irgendwie so: "directshow java wrapper". 

Alternativen: Hmm, nur eingeschränkt. JavaFX hat JavaMediaComponents. Das bedient sich unter Windows an DirectShow, und unter Linux GStreamer. Hat nur den Nachteil dass es auf "abspielen" und "empfangen und abspielen" ausgelegt ist. Und nicht auf "Aus Webcamdaten eigenen Stream basteln".

Davon mal abgesehen ist mir keine Lib bekannt. Aber du kannst natürlich auch was eigenes mit VB oder so bauen, z.B. als ActiveX Control und das dann mit Eclipse SWT und dessen Ole-Brücke nach Java adaptieren. Oder eben direkt mit JNI.

- Alex


----------



## Kr0e (19. Jul 2010)

@Tuxedo:
GStreamer ist sehr leicht zu benutzen. Dachte auch erst es wäre kompliziert,
aber Dank GStreamer-Java geht das wunderbar. Einfach die GStreamer WIn32 Builds installeiren (Sogar ganz komfortabel mit .msi installer) Und los gehts! Webcam ist damit ebenfalls wunderbar möglich. Videoplay natürlich auch (HD1080 etc. kein Problem).

Xuggler ist wie gesagt etwas komplizierter aber dafür ist damit sehr viel mehr möglich.
Xuggler kann gerade in Bezug auf Webcam eine coole Sache:

-> On-The-Fly Videokompression (Praktisch für streaming-server)

Damit kannste dann alles selbstmachen quasi... 
Wenn du eh nur auf Windoof programmierst dann reicht der DirectXYZ Kram.

Gruß,

Chris


----------



## tuxedo (19. Jul 2010)

Kr0e hat gesagt.:


> @Tuxedo:
> GStreamer ist sehr leicht zu benutzen. Dachte auch erst es wäre kompliziert,
> aber Dank GStreamer-Java geht das wunderbar. Einfach die GStreamer WIn32 Builds installeiren (Sogar ganz komfortabel mit .msi installer) Und los gehts! Webcam ist damit ebenfalls wunderbar möglich. Videoplay natürlich auch (HD1080 etc. kein Problem).



Mein letzter Versuch ist knapp 3 Monate her. Damals hatte ich es nicht geschafft GStreamer auf Windows korrekt zu installieren und die Java Bindungs zu nutzen. Aber gut, vielleicht war ich da nicht geduldig genug, oder vielleicht hat sich das in den vergangenen 3 MOnaten auch gebessert. Wer weiß ...




> Xuggler ist wie gesagt etwas komplizierter aber dafür ist damit sehr viel mehr möglich.
> Xuggler kann gerade in Bezug auf Webcam eine coole Sache:
> 
> -> On-The-Fly Videokompression (Praktisch für streaming-server)



Sollte doch mit GStreamer auch gehen ... Fehlen wenn dann nur die passenden Filter?!


----------



## Kr0e (19. Jul 2010)

Geht bestimmt mit GSTreamer, aber ich finde das Xuggler API einfach einfacher sobald man
etwas weniger triviales machen will als eine Datei abzuspielen.
Außerdem was du gerade angesprochen hast mit den JavaBindings...
Xuggler ist einfacher zu installieren.

Ich glaube auch, dass sich ne Menge getan hat... Bis vor einiger Zeit konnte man damit nicht mal "seeken" bzw.
beim seeken gab es des öfteren Mal nen Absturz... (Also gei GStreamer jetzt speziell)

Ich würde jedem, der mit Medien und Java arbeiten, GStreamer-Java empfehlen. Ich fand zuerst JMC ziemlich gut,
aber da stößt man schnell an die Grenzen (Was du eben schon gesagt hast (Ist nur zum Abspielen etc. geeignet...))
JMF muss man nix zu sagen und FMJ ist genauso umständlich und unpraktisch leider.

Gruß,

Chris


----------



## LilMartini (19. Jul 2010)

Langsam komme ich mit den ganzen Techniken durcheinander... auf mein Projekt bezogen:

Was benutze ich jetzt am besten wofür?

Grüße


----------



## Kr0e (19. Jul 2010)

Wenn du NUR mit Windows arbeitest und du mit DirectShow gut klar kommst => Nimm DS.
Wenn du iwann mal Geld verlangen willst, solltest du überlegen dir eine Lizenz zu holen.

Wenn du für alle Plattformen eine Lösung anbieten möchtest und kein Geld für Lizenzen ausgeben willst
UND vorallem etwas Interesse und Durchhaltevermögen hast, etwas scheinbar komplizierteres an Stelle 
von etwas einfacherem zu wählen, dann würde ich dir speziell Xuggler empfehlen, oder auch GStreamer-Java.
Beide Projekte sind mehr als aktiv und verfügen über eine große und hilfsbereite Community.
Aber mit einem 5Zeiler ist es dann natürlich nicht getan.

Bei Xuggler brauchst du auch gute Netzwerkkenntnisse. Ich glaube mit GStreamer kann man Streamingserver starten, ohne dabei jetzt Ahnung von Socketprogrammierung zu haben. Aber ich habe keine Ahnung wie umfangreich oder kompliziert das mit GStreamer ist. Ich habe mit Netty3 und Xuggler gute Erfahrungen gemacht. Damit kann man wirklich so ziemlich alles machen, was mit 
Media-Streaming etc. zu tun hat.

Mit Xuggler und Netzwerkkenntnissen sind auch eigene "TeamSpeak"-Projekte nicht allzu schwer.
Xuggler ist halt relativ low-levelig weshalb alles zusammen erstmal mehr Schreibarbeit ist... 
Aber im Endeffekt vermutlcih weniger Arbeit als die ganze Zeit ein highlevel-Framework zu benutzen und bei kleinsten Problemen dann nach einem Workaround suchen, damit man möglichst dieses FRamework benutzen kann...

Solltest dir das auf jeden Fall mal anschauen und wenn du nach einer weile merkst "wow! stopp! wat ?!?!", dann nimm lieber DS 

Gruß,

Chris


----------



## LilMartini (19. Jul 2010)

Und wenn ich nicht unbedingt DSJ nutzen möchte, womit Steuere ich denn nun die Webcam an? Die bisher besprochenen Techniken waren ja alle für die Kompression und das STreaming an sich.


----------



## Kr0e (19. Jul 2010)

Wie gesagt, es ist kein 5 Zeiler...

Hier ist der Gebrauch einer Webcam demonstriert:

http://xuggle.googlecode.com/svn/tr.../xuggle/xuggler/demos/DisplayWebcamVideo.java

Ansonsten einfach mal auf der Seite von Xuggler speziell nach Tutorials suchen und etwas vertrauter mit Xuggler werden...


Gruß,

Chris


----------

