Zwei Webcam-Anwendungen

  • Hi,
    nachdem ich die Webcam-UDF von Ludocus etwas erweitert habe, ist sie nun auch sinnvoll nutzbar. (außer Video-Aufzeichnung, die schmiert noch ab - da bin ich noch dran)
    Hier mal ein kleines Bsp.:
    - Kamera ein/ausschalten
    - Toggle Standbild/Livebild
    - Schnappschuß (gespeichert wird im @ScriptDir)
    - *.avi -Aufzeichnung (Speicherplatz in Einstellungs-INI bestimmbar) <== Bsp. 2 (MyWebcam)


    Edit 13.09.2011
    Die zweite Anwendung basiert auf der ersten, hat aber zusätzlich auch die Record-Funktion. In der Original-UDF fehlten da die entscheidenden Funktionen um Aufzunehmen ohne dass die Anwendung einfriert. Das Problem ist nun gelöst.
    Resultierend daraus ist die Konstantendatei um eine Struktur erweitert. Die Funktionen habe ich jetzt in eine eigene Datei gepackt. Wenn ihr sie nicht im registrierten Include-Ordner speichert, muß zumindest die Konstanten-Datei im selben Ordner, wie die Funktionsdatei gespeichert werden.


    Ich habe nur die notwendigen UDF-Funktionen gleich in das Skript gepackt (getrennt in Bsp. MyWebcam). Die Konstanten habe ich jedoch in die "WebcamConstants.au3" ausgelagert.




  • Täusche ich mich, oder fehlt immernoch ( :) ) die vorgeschlagene Option über die Treiber ID zwischen den ev. mehreren Cams zu wechseln. Ist bestimtm auch für die hilfreich, deren Cam (meist intern) nicht mit der ersten (default) ID verknüpft ist.


    MfG, campweb

  • Da dies die einzige deutsche UDF ist und ansprechend ist,
    nehme ich mir mal das frevelhafte Recht heraus,
    dem Thema den Bart zu schneiden ;)


    Und zwar bekomme ich nur ein schwarzes Bild!
    System: Win 7 64bit


    //edit:
    Ab und zu geht es, ab und zu nicht.
    Habe mittlerweile rausgefunden dass es nicht geht,
    wenn ich beim Initialisieren eine Videoquelle auswählen muss.


    Habe ich allerdings über Flash (Firefox Browser) eine Seite offen die auf die Kamera zugreift und schließe ich diese Seite,
    so entfällt der Dialog und die Kamera geht.


    Rätselhaft...

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

    2 Mal editiert, zuletzt von Dankeschön ()

  • Und das soll nun was genau bewirken?
    Ich weiß nicht ob PixelSearch und MouseMove wirklich was mit meinem Problem zu tun hat...

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Ich könnte mir vorstellen, dass es generell nicht funktioniert wenn zwei Programme auf die Webcam zugreifen wollen. Hast du schon mal probiert zwei andere Programme zu starten welche beide auf die Webcam zugreifen?



    Gruss Shadowigor

  • Dass das nicht geht habe ich bereits herausgefunden.
    Habe ich nämlich bspw die Kamera im Browser geöffnet und will sie nutzen,
    ist das Bild komplett grün.
    Mach ich den Tab hingegen zu, geht alles problemlos.


    Ohne den Erstversuch von Flash hingegen bleibt das Bild immer schwarz.
    Die Frage ist: Wieso? Und wie kann man dem entgegenwirken?

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Folgendes:


    Die Anwendungen, die einen Zugriff auf die Webcam integriert haben, scheinen sich den Zugang zu "reservieren". So passiert folgendes:
    - System frisch gestartet
    --- Webcam.au3 aufrufen --> funktioniert tadellos
    - Start Skype (ohne die Camfunktion dort zu starten)
    --- Webcam.au3 aufrufen --> Cam läßt sich nicht aktivieren
    - Skype beenden (kpl. schließen)
    --- Webcam.au3 aufrufen --> Cam läßt sich weiterhin nicht aktivieren
    - System neu starten
    -- allles wie vorab


    Ich habe nicht die geringste Ahnung, wie diese "Reservierung" und somit Blockade der Cam stattfindet und wie man sie umgehen kann. Aber ich vermute, dass nicht die avicap32.dll verwendet wird und somit der Aufruf der Dll ins Leere läuft, da ein Bindung an die Hardware durch die "fremde" Software unterbunden wird.


    Fazit:
    Die webcam.au3 funktioniert tadellos - bis eine andere Software erstmals Zugriff auf die Cam erlangt hat. Dann ist sie bis zum nächsten Neustart tot. :wacko:

  • So eine ähnliche Theorie hatte ich ja auch,
    aber du hast eine Kleinigkeit vergessen.


    Und zwar braucht man den PC nicht neuzustarten.
    Alles geht ja wieder wenn man über Flash die Kamera nutzt.
    Flash scheint da also alles irgendwie zurückzusetzen.
    Und wenn die das können, gehts sicher auch anders
    (oder man kann Flash irgendwie fernsteuern dass die Webcam wieder "gefixt" wird)

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Hallo zusammen,


    ich bin ein begeisterter Nutzer der auf autoit.de und autoscript.com geposteten UDFs für webcams und konnte schon eine Menge an Hürden überwinden oder umschiffen. Bei einem ist es mir jedoch nicht gelungen.


    Folgende Aufnahmefunktionen nutze ich:
    Func StartRecording()
    WinSetTitle($Main, "", "WebCam - Capturing...")
    HotKeySet("{HOME}", "StopRecording")
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)
    EndFunc


    Func StopRecording()
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_STOP, "int", 0, "int", 0)
    WinSetTitle($Main, "", "WebCam - Ready")
    HotKeySet("{HOME}", "StartRecording")
    EndFunc


    Das Problem ist, dass das Video im Rohformat aufgenommen wird und ca 10 MB pro Sekunde(!) an Speicherplatz benötigt!


    Nun habe ich z.B. Folgendes probiert:
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DLG_VIDEOCOMPRESSION, "int", 0, "str", "C:\Program Files (x86)\Windows Live\Photo Gallery\MovieMaker.exe")
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)


    Funktioniert leider nicht.


    Vielleicht weiss einer von euch, wie man gleichzeitig mit der Aufnahme auch komprimieren kann...?!?

  • Hallo zusammen,


    also ich habe immer noch das gleiche Problem. Wenn ich folgenden Code benutze:
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DLG_VIDEOCOMPRESSION, "int", 0, "str", "")
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)


    Dann erscheint folgendes Auswahlmenü:
    [Blockierte Grafik: https://www.anonimg.com/img/3da4687f3605c84abfdb99d62d0543d9.png]


    Wenn ich dann ein Komprimierungsprogramm auswähle, wird auch entsprechend komprimiert aufgenommen.


    Ich will das aber die Aufnahme von einem anderen Rechner aus per TCP ausführen und kann dahernicht jedesmal manuell den gewünschten Codec auswählen. Habe alle möglichen Variationen der obigen mittleren Code-Zeile versucht - ohne Erfolg. Es muss aber irgendwie gehen. Hat wirklich keiner von euch eine Idee?