Video-Stream

  • Kann ich irgendwie einen Videostream von meinem Bildschirm erstellen?
    So das dann andere sich das angucken können? Also muss mit AutoIt sein. Währe nett wenn ihr eine Idee habt

    Danke im vorraus

    mfg. Jam00

  • Mach es doch so
    Du Startest ein Server (Per TCP oder UDP ist Egal)

    Sobald sich ein Client mit deinem Server verbindet, Macht der Server einen Screenshot, Speichert ihn in einer Temp-Datei und Sendet ihn so Oft an den Clienten, Bis er die Verbindung geschlossen hat

    Prinzip: Mini-TeamViewer :D

    Sollte so eigentlich Gehen, PS: "Ich würde TCP für die Übertragungen wählen, da die Meißten DateiÜberTCP-Senden UDF's auf TCP Basieren!)

  • Nur wird das sicher kein film sondern immer nur ein einzelbild ca. jede sekunde mal

    Für ein richtiges video wird autoit wahrscheinlich nicht ausreichen

    mfg

    Computers are like Airconditioning. They don´t work with open Windows.

  • Das Problem ist nicht AutoIt, sondern die Bandbreite des Senders! Selbst auf einem langsamen Rechner sind 15-20 Screenshots die Minute kein Ding, aber wenn man mal nachrechnet wirds eng....
    20x1680x1050x32Bit = rund 1GBit/Sekunde , da braucht man ne FETTE Leitung. Bissl komprimieren geht ja immer, aber das löst das Problem nicht. Die Datenmenge ist einfach zu hoch, daher nutzen die meisten Remote-Desktop-Programme eine niedrigere Auflösung und Farbtiefe.
    20x1024x768x16Bit = 200 MBit/Sekunde, sieht schon besser aus....aber immer noch zu viel.
    Daher verwendet man keine Screenshots sondern streamt "echtes" Video und überträgt nur das, was sich im Bild gerade geändert hat. Aber wer sagt denn, daß das nicht auch mit AutoIt und den Screenshots funktioniert^^

  • aber wie filtert man die dinge raus die sich verändert haben
    denn ich brauche das auch

    //Edit:Vieleicht ginge das wenn man Pixel für Pixel abrattert (also die Farben mit PixelGetColor) und dann die position und die neue farbe des pixels rüberschikt. Aber wäre das nicht viel größer ??


    //Edit2:Oder man schneidet die dinge raus die im 1.Bild schon waren und lässt nur noch die neuen dinge stehen und legt das dann übereinander.Aber da bräuchte man ne Funktion PixelDel oder so was
    vieleicht weiß einer Rat

  • Ich hab es jetzt mal so Probiert, also übers Netzwerk ging es, ahb es aber noch mit niemanden übers internet probiert
    Auserdem wird nicht nur das Aktualieseier was Neu ist sonder halbt immer alles neu gemacht

    Viewer
    [autoit]

    #include <INet.au3>
    $hWnd = GUICreate("PC-Cooperation", @DesktopWidth / 2, @DesktopHeight / 2)
    $hPic = GUICtrlCreatePic("", 0, 0, @DesktopWidth / 2, @DesktopHeight / 2)
    GUISetState(@SW_SHOW)
    $PIC = @ScriptDir & "\Temp.jpeg"
    TCPStartup()
    $MainSocket = TCPListen(_GetIP(), 31758)
    ;~ InputBox ("IP","Die IP ist:",@IPAddress1)
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1
    While 1
    $recv = _Recv()
    If $recv = "Send" Then
    FileDelete($PIC)
    $Open = FileOpen($PIC, 18)
    TCPSend($ConnectedSocket, "1")
    While 1
    $recv = _Recv()
    If $recv = "ENDE" Then
    ExitLoop
    Else
    FileWrite($Open, $recv)
    EndIf
    WEnd
    FileClose($Open)
    TCPSend($ConnectedSocket, "1")
    GUICtrlSetImage($hPic, $PIC)
    EndIf
    Sleep(10)
    WEnd
    Func _Recv()
    Local $recv
    Do
    $recv = TCPRecv($ConnectedSocket, 1024)
    Until $recv <> ""
    Return $recv
    EndFunc ;==>_Recv

    [/autoit]
    Screen Channel
    [autoit]

    #include <ScreenCapture.au3>
    #include <Inet.au3>
    TCPStartup()
    Do
    $ConnectedSocket = TCPConnect(InputBox ("IP","Gib die IP des Servers ein",_GetIP()), 31758)
    Until $ConnectedSocket <> -1
    _ScreenCapture_SetJPGQuality(50)
    $PIC = @ScriptDir & "\Temp\Temp.jpeg"
    While 1
    $hBmp = _ScreenCapture_Capture("")
    _ScreenCapture_SaveImage($PIC, $hBmp)
    $Open = FileOpen ($PIC,16)
    TCPSend($ConnectedSocket, "Send")
    _Recv()
    While 1
    $Read = FileRead ($Open,1024)
    If @error Then ExitLoop
    TCPSend($ConnectedSocket,$Read)
    If @error Then ExitLoop
    WEnd
    Sleep (100)
    TCPSend ($ConnectedSocket,"ENDE")
    _Recv()
    FileClose ($Open)
    FileDelete($PIC)
    WEnd
    Func _Recv()
    Local $Recv
    Do
    $Recv = TCPRecv ($ConnectedSocket,1024)
    Until $Recv <> ""
    Return $Recv
    EndFunc

    [/autoit]

    mfg. Jam00