Java Videoframework für Java

cl0udt

Lt. Junior Grade
Registriert
Sep. 2008
Beiträge
508
Hallo zusammen,

ich versuche gerade ein Framework zu finden, mit dem ich Videos abspielen kann auf meiner Homepage und auch in meiner mySQL-DB abspeichern kann. Ich hab auf http://en.wikipedia.org/wiki/Java_Media_Framework ganz unten jetzt ziemlich viele gefunden, aber wäre ganz nett mal ein paar Erfahrungsberichte zu bekommen von euch.
Ich möchte natürlich bestenfalls so viele Videoformate wie möglich abspielen können (in welchem Format speicher eine herkömmliche Videocam denn eigentlich ab?).
Das Framework muss halt auch frei zu benutzen sein.

Vielen Dank im Voraus!

Gruß
Benny
 
Ich bekomme gerade die Kurve nicht von Java zu Video auf Homepage. Videos lieferst du doch per gerendertem HTML aus und abspeichern kannst du sie im normalen Dateisystem, die DB braucht nur die Pfade wissen.
 
Du hast deine Webseite als Java-Anwendung geschrieben?

Könnte es sein, dass du so etwas wie VideoJS suchst?
 
Falls ich dieses
in meiner mySQL-DB abspeichern
richtig verstanden habe, also im Sinne von die Videos als BLOBs in die Datenbank zu speichern, dann kann ich dir dringendst davon abraten, es so zu lösen. Erzeugt nur Stress bei Backups, Spiegelungen, Performance, Zugriffsrechte und Nutzbarkeit. Speicher die Daten lieber auf einer eigenen (gespiegelten, verteilen) Partition und verlinke durch die Datenbank darauf.
 
Zuletzt bearbeitet:
@DasBoeseLebt und UltiSalamander
Danke für eure Vorschläge. Ich nutze Wicket als Framework. Ich hab prinzipiell eine HTML-Seite, auf der ich den ganzen Listen, Buttons etc. eine Wicket-ID gebe und kann dann in der zur HTML-Seite zugehörigen Java-Klasse den Komponenten (mithilfe der Wicket-ID) ihre Funktionen geben.
Leider finde ich vom Wicket-Framework nicht hilfreiches in Sachen Videodarstellung.
Bei euren Vorschlägen wüsste ich jetzt nicht, wie man dynamisch ein Video auf der HTML-Seite lädt. Ist das da möglich?

@Kanibal
Ok, ich hab da relativ wenig Ahnung von. Kann mir aber vorstellen, dass das stressig werden kann. Mit Bildern genauso verfahren?


Edit:
Ich finde gerade auch nicht mal raus, wie ich HTML5 überhaupt verwenden kann auf der HTML-Seite. Dachte man muss nur über <HTML> diese erste Zeile da anpassen, aber so einfach is es wohl net...
Wenn ich nämlich versuche dieses Beispiel von DasBoeseLebt und UltiSalamander einzubauen, sagt er "Last cause: Tag '<source src="movie.ogg" type="video/ogg">' (line 28, column 32) has a mismatched close tag at '</video>' (line 30, column 1)"...
 
Zuletzt bearbeitet:
Das Abspielen löst du am Besten mit einem SWF/Flash-Video player oder HTML5 (wie oben genannt).

Deine Videos legst du in ein Verzeichnis auf deinem Server das über HTTP erreichbar ist z.B. www.example.com/videos/

Hängt davon ab was du brauchst, aber als MySQL Datenbank wüde ich folgende Struktur vorschlagen:
Tabelle: video
Spalten: id, dateiname, titel

Mit Java generierst du dann den passenden HTML code:

Flash:
Je nachdem welchen Flash-Video-Player du verwendest, musst du die URL zum Video als Parameter angeben. Deine Video-URL generierst du aus einem statischen Teil "http:/www.example.com/" und hängst den Dateinamen aus der Datenbank dran.

HTML 5:
Doctype damit der Browser HTML 5 versteht: <!DOCTYPE html>

Video Tag:
<video width="320" height="240" controls>
<source src="VIDEO_URL" type="video/mp4 (= VIDEO_TYP)">
Your browser does not support the video tag.
</video>
 
Jetzt habe ich dein Problem verstanden. :freaky:

Code:
@SuppressWarnings("serial")
public class Video extends WebComponent {


    private final String src;
    private final String type;


    public Video(String id, String src, String type) {
        super(id);
        this.src = src;
        this.type = type;
    }


    @Override
    public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
        Response response = getRequestCycle().getResponse();
        response.write("<source src=\"" + src + "\" type=\"" + type + "\">");
    }
}

Code:
@SuppressWarnings("serial")
public class HomePage extends WebPage {


    public HomePage(final PageParameters parameters) {
        super(parameters);


        add(new Video("myVideo", "some/crazy/url.mp4", "video/mp4"));
    }
}

Code:
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
    <head>
    </head>
    <body>
     <video wicket:id="myVideo" />
    </body>
</html>
Wenn dir eine Komponente fehlt, bau sie dir einfach selbst. Für winzige snippets tut es auch ein Label, was direkt html rausrendert, aber für solche wiederverwendbaren Sachen, kann man das schon mal hübsch machen.

Edit: evtl. wäre es sogar schöner das Markup extra hinzulegen, d.h. ein Panel zu benutzen, aber da es so wenig ist, geht das so auch.
 
Zuletzt bearbeitet:
@fruel
Muss ich die in einem via HTTP erreichbaren Verzeichnis ablegen? Ich dachte, ich könnte vielleicht einfach irgendeinen Dateipfad nehmen und gut is?!
Hätte dann jetzt nur noch den Pfad in meine Tabelle hinzugefügt, also:
Tabelle: Übung
Spalten: ..., Bild, Video, Beschreibung, ...

Der HTML code funktioniert so bei mir nicht, er sagt immer mismachted close tag </video>.

Was funktioniert hat, ist das Beispiel von http://sandbox.thewikies.com/vfe-generator/

@Tumbleweed
Vielen Dank. Sieht echt sehr einfach und übersichtlich aus. Wenn ich es so bei mir dann auch noch zum laufen bekomme, wäre das natürlich die perfekte Lösung.
Mein Problem ist, dass es auf der Seite dann gar nix anzeigt. Hatte mal spaßeshalber "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" als src eingefügt von der oben genannten Website.
Müsste da im HTML code jetzt nicht noch irgendwie ein Player, wie z.B. JW Player, FlashFox oder so, eingebunden werden?


Hatte mir halt eben dieses Beispiel von http://sandbox.thewikies.com/vfe-generator/ zu gemüte geführt und dann auf http://apache-wicket.1842946.n4.nabble.com/Adding-Adobe-Media-Player-in-wicket-td1872985.html,
wie ich mit hilfe von Models die Attribute dann austausche auf der HTML-Seite...aber is schon ziemlicher "murks" und weiß auch nicht, ob das auf die art und weise die optimale lösung ist.
 
Kann schon sein, dass du da noch ein bisschen dranzimmern musst, damit das funktioniert. Bin noch nicht in die Verlegenheit gekommen Videos einbinden zu müssen, daher weiß ich die korrekte Syntax-Konstruktion nicht aus der Hüfte. War eher gedacht als "so bastelst du dir die Komponente selbst"-how-to ;)
Attribute modifizieren geht eigentlich ganz leicht:
Code:
@SuppressWarnings("serial")public class Video extends WebComponent {


    private final String src;
    private final String type;


    public Video(String id, String src, String type) {
        super(id);
        this.src = src;
        this.type = type;


        add(new AttributeModifier("width", new LoadableDetachableModel<String>() {


            @Override
            protected String load() {
                return getRequestCycle().getRequest().getRequestParameters().getParameterValue("hires").toInt() == 1 ? "720" : "320";
            }


        }));
    }


    @Override
    public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
        Response response = getRequestCycle().getResponse();
        response.write("<source src=\"" + src + "\" type=\"" + type + "\">");
    }
}
Sollte man natürlich etwas stabiler gestalten, für den Fall dass jemand an der URL rumspielt und so.
Code:
<!DOCTYPE html><html xmlns:wicket="http://wicket.apache.org">
	<head>
	</head>
	<body>
	 <video wicket:id="myVideo" width="720"><source src="some/crazy/url.mp4" type="video/mp4"></video>
	</body>
</html>
 
Zuletzt bearbeitet:
Also ich bekomme es leider nicht hin, so wie du es vorgeschlagen hast.
Bis jetzt läuft es nur mit folgendem Code:


HTML:
<!-- "Video For Everybody" http://camendesign.com/code/video_for_everybody -->
<object type="application/x-shockwave-flash" data="http://flashfox.googlecode.com/svn/trunk/flashfox.swf" width="640" height="360">
    <param name="movie" value="http://flashfox.googlecode.com/svn/trunk/flashfox.swf" />
    <param name="allowFullScreen" value="true" />
    <param name="wmode" value="transparent" />
    <param name="flashVars" value="controls=true&amp;poster=http%3A%2F%2Fsandbox.thewikies.com%2Fvfe-generator%2Fimages%2Fbig-buck-bunny_poster.jpg&amp;src=http%3A%2F%2Fclips.vorwaerts-gmbh.de%2Fbig_buck_bunny.mp4" />
    <img alt="Big Buck Bunny" src="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" width="640" height="360" title="No video playback capabilities, please download the video below" />
</object>
<p>
    <strong>Download video:</strong> <a href="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4">MP4 format</a> | <a href="http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv">Ogg format</a> | <a href="http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm">WebM format</a>
</p>

Habe dann einfach unten den parameter mit dem link zum video folgendermaßen bearbeitet:
<param name="flashVars" value="test" />

Und dann habe ich im Java-Code in der zugehörigen Klasse folgendes gemacht:

Code:
    IModel flashValue = new AbstractReadOnlyModel<String>(){ 

        @Override 
        public String getObject() { 
            return "controls=true&amp;poster=http%3A%2F%2Fimages2.alphacoders.com%2F673%2F6730.jpg&amp;src=http%3A%2F%2Fclips.vorwaerts-gmbh.de%2Fbig_buck_bunny.mp4"; 
        } 

    }; 
    
    
    WebMarkupContainer flashSrc = new WebMarkupContainer("flashSrcTag");
    flashSrc.add(new AttributeModifier("value", flashValue)); 
    add(flashSrc);

Aber nun wird das Video nicht mehr abgespielt...findet das Video wohl net, denke ich.

Würde das schon gerne so ähnlich machen, wie du es gezeigt hast, aber erstmal muss ich den Code so zum laufen bekommen...
Ergänzung ()

Ok, habe jetzt folgendes gemacht und das funktioniert auch so:

Video.Java
Code:
public class Video extends Panel {
    
    public final String src;

    public Video(String id, String src) {
        super(id);
        this.src = src;
        
        
        WebMarkupContainer flashSrc = new WebMarkupContainer("flashSrcTag");
        flashSrc.add(new AttributeModifier("value", "src="+ this.src)); 
        this.add(flashSrc); 
    }
}

Video.html
HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>

<br/>
<br/>
<br/>

<wicket:panel>

<object type="application/x-shockwave-flash" data="http://flashfox.googlecode.com/svn/trunk/flashfox.swf" width="640" height="360">
    <param name="movie" value="http://flashfox.googlecode.com/svn/trunk/flashfox.swf" />
    <param name="allowFullScreen" value="true" />
    <param name="wmode" value="transparent" />
    <param wicket:id="flashSrcTag" name="flashVars" value="video" />
</object>

</wicket:panel>

</body>
</html>


Auf der eigentlichen Page benutze ich das Panel dann folgendermaßen:
Code:
add(new Video("myVideo", "http%3A%2F%2Fclips.vorwaerts-gmbh.de%2Fbig_buck_bunny.mp4"));

Und im HTML lediglich
HTML:
 <div wicket:id="myVideo" />


Bei einer Sache habe ich allerdings noch Probleme:

Ich kann nur eine url als videosource nutzen, würde lieber irgendeinen Pfad aus dem Dateisystem angeben...wieso kann man da nur urls übergeben?
 
Zuletzt bearbeitet:
Zurück
Oben