michael: Bildschirm "filmen"

Hallo

Ich sitze hier hinter einem ziemlich seltsamen Problem: Meine Videokamera ist am Composite-Eingang meiner TV-Karte angeschlossen und sendet dadurch Live-Bilder, die ich mit meiner TV-Software (Pinnacle...nicht DAS wahre aber habe nix besseres gefunden, zumindest im Netz) anschauen kann. Nun soll dieser Input mittels eines Java-Programmes ausgewertet werden. Dazu "filme" ich schlicht und einfach den Bildschirm mit der Klasse java.awt.Robot. Diese fängt einen bestimmten Bildschirmbereich als Bild (BufferedImage) ein und man kann dieses Bild dann z.B. speichern oder anzeigen. Funktioniert auch ganz gut, allerdings nur auf Bildschirmbereichen, auf dem kein Video läuft. Ich kann also beispielsweise mein Startmenü filmen lassen oder meine Task-Leiste. Sobald aber aber ein Video gefilmt vom Bildschirm wird, liefert Java dort, wo eigentlich das Videobild sein müsste, nur schwarz. Das selbe geschieht übrigens nicht nur mit dem TV-Guck-Programm von Pinnacle sondern z.B. auch beim Windows Media Player oder bei anderen TV-Guck-Programmen.

Soviel zum Problem.

Nun zu meinen "Theorien":

1. Es ist ja oftmals nicht möglich, Videos vom Computer über den TV-Ausgang abzuspielen, aus Urheberrechtsgründen... Könnte es das sein? (Hier liegt allerdings der umgekehrte Fall vor.) Und wie könnte ich das umgehen? Meine Absichten sind ja ganz und gar legal ;-)

2. Videos werden ja teilweise relativ hardwarenah verarbeitet. Könnte es sein, dass daher diese Daten z.B. woanders verarbeitet werden, als die normalen Grafik-Daten? Und wie komme ich da trotzdem 'ran?

Gruss

michael

  1. hallo,

    Sobald aber aber ein Video gefilmt vom Bildschirm wird, liefert Java dort, wo eigentlich das Videobild sein müsste, nur schwarz.

    Ja, natürlich. Weil die Grafikausgabe deiner TV-Karte mit deiner Grafikkarte so gut wie nichts zu tun hat.

    1. Es ist ja oftmals nicht möglich, Videos vom Computer über den TV-Ausgang abzuspielen, aus Urheberrechtsgründen...

    Es dürfte sich um wesentlich andere technische Gründe handeln.

    wie komme ich da trotzdem 'ran?

    Nimm zum Abspielen ein Programm, das streamen kann, zum Beispiel VLC.

    Wie kommst du eigentlich darauf, daß deine Frage etwas mit JAVA zu tun haben müßte?

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo

      Wie kommst du eigentlich darauf, daß deine Frage etwas mit JAVA zu tun haben müßte?

      Ich programmiere das ganze in Java ;-) Natürlich betrifft nur ein Teil des Problems die Programmiersprache Java und das dazugehörige Framework.

      Gruss

      michael

      1. hallo,

        Ich programmiere das ganze in Java ;-)

        Warum machst du dir diese Mühe,wenn es doch ausgereifte kostenlose Software dafür gibt?

        Ich habe ebenfalls TV-Karten (in mehreren Rechnern, überwiegend allerdings Hauppauge) und kenne das von dir benannte "Phänomen". Mit xawtv, fxtv und anderen Programmen unter Linux tritt das nicht auf, und mit dem bereits genannten VLC (oder VLS) ist es auch unter Windows gegenstandslos. Windows Media Player ist das denkbar ungeeignetste Instrument, die "Originalsoftware" ist dagegen ganz ordentlich, nimmt nur auf deine Grafikkarte keine Rücksicht. Im übrigen lohnt es sich, zum Thema auch die Suche zu bemühen.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. hallo

          Ich programmiere das ganze in Java ;-)

          Warum machst du dir diese Mühe,wenn es doch ausgereifte kostenlose Software dafür gibt?

          Achso...weil ich ein bisschen mit live-Auswertung von Bildern experimentieren möchte. Es geht also nicht nur um simples Speichern, sondern auch noch um das Verarbeiten mittels entsprechender (noch zu erstellender Software). Warum in Java? Weil ich das halt relativ gut kann, im Gegensatz zu beispielsweise C/C++.

          Gruss

          michael

    2. hi nochmals ;-)

      Sobald aber aber ein Video gefilmt vom Bildschirm wird, liefert Java dort, wo eigentlich das Videobild sein müsste, nur schwarz.

      Ja, natürlich. Weil die Grafikausgabe deiner TV-Karte mit deiner Grafikkarte so gut wie nichts zu tun hat.

      Aber die Daten laufen doch von Composite-Eingang über die DACs in der TV-Karte via PCI irgendwann zum Prozessor, der sie dann an die Grafikkarte weitergibt? - Oder etwa...?! ;-)

      Gruss

      Michael

    3. Hallo

      Danke für die Hilfe - es läuft jetzt!

      Lösung: VLC installiert, und dann bei Einstellungen unter "Video -> Output Modules (Erweiterte Einstellungen rechts unten aktivieren)" Windows GDI auswählen und das Programm neustarten.

      Vielleicht probiere ich dann noch eine Lösung aus, ob ich die Daten direkt von der TV-Karte in mein Programm kriege ;-)

      Gruss

      Michael

      1. hallo,

        Danke für die Hilfe - es läuft jetzt!

        Na bitte, dann ist ja alles gut.

        Lösung: VLC installiert, und dann bei Einstellungen unter "Video -> Output Modules (Erweiterte Einstellungen rechts unten aktivieren)" Windows GDI auswählen und das Programm neustarten.

        Ja, ungefähr in diese Richtung ging mein Vorschlag. Im übrigen ist VLC Open Source und steht unter der GNU GPL. Damit steht deiner Experimentierfreude nichts im Wege, so daß

        noch eine Lösung [...], ob ich die Daten direkt von der TV-Karte in mein Programm kriege ;-)

        mit genügend Geduld únd etwas Bastelaufwand prinzipiell nichts im Wege stehen dürfte.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
  2. Hi there,

    1. Videos werden ja teilweise relativ hardwarenah verarbeitet. Könnte es sein, dass daher diese Daten z.B. woanders verarbeitet werden, als die normalen Grafik-Daten? Und wie komme ich da trotzdem 'ran?

    Ja, das ist der eigentliche Grund, aus Performancegründen nimmt das Signal bei Videos nicht den Umweg über den Videobuffer, der normalerweise ausgelesen wird, wenn Du den Bildschirm "capturest"...