Webcam Video LiveStream über Lan übertragen?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Rothammel
Beiträge: 53
Registriert: 17.09.2006 17:22

Fortschrit

Beitrag von Rothammel »

Hallo nun habe ich es geschaft den Videostream auf HDD zu speichern.
Das Webcambild wird auch in die Zwischenablage gelegt.

hier der Code:

Code: Alles auswählen

#WM_CAP_START = #WM_USER

#WM_CAP_SET_CALLBACK_ERROR = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_STATUS = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7

#WM_CAP_DRIVER_CONNECT        =  #WM_USER + 10
#WM_CAP_DRIVER_DISCONNECT     =  #WM_USER + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14

#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43

#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_GET_STATUS = #WM_CAP_START + 54

#WM_CAP_FILE_SAVEDIB          =  #WM_USER + 25
#WM_CAP_SET_SCALE             =  #WM_USER + 53

#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85

#WM_CAP_COPY_EDIT = #WM_CAP_START + 30

#WM_CAP_START = #WM_USER
#WM_CAP_FILE_GET_CAPTURE_FILEA = #WM_CAP_START + 21
#WM_CAP_DLG_VIDEOCOMPRESSION = #WM_CAP_START + 46
#WM_CAP_STOP = #WM_CAP_START + 68
#WM_CAP_SEQUENCE = #WM_CAP_START + 62


Structure VIDEOHDR
  lpData.l
  dwBufferLength.l
  dwBytesUsed.l
  dwTimeCaptured.l
  dwUser.l
  dwFlags.l
  dwReserved.l[3]
EndStructure

Structure CAPSTATUS
  uiImageWidth.l
  uiImageHeight.l
  fLiveWindow.l
  fOverlayWindow.l
  fScale.l
  ptScroll.Point
  fUsingDefaultPalette.l
  fAudioHardware.l
  fCapFileExists.l
  dwCurrentVideoFrame.l
  dwCurrentVideoFramesDropped.l
  dwCurrentWaveSamples.l
  dwCurrentTimeElapsedMS.l
  hPalCurrent.l
  fCapturingNow.l
  dwReturn.l
  wNumVideoAllocated.l
  wNumAudioAllocated.l
EndStructure

hWnd = OpenWindow(0, 0, 0, 800, 600, #PB_Window_SystemMenu, "WebCamTest")

CreateGadgetList(WindowID())

If OpenLibrary(0, "AVICAP32.DLL")

hWebcam = CallFunction(0, "capCreateCaptureWindowA", "BLUBBER", #WS_VISIBLE + #WS_CHILD, 10, 10, 640, 480, hWnd, 0)

SendMessage_(hWebcam, #WM_CAP_DRIVER_CONNECT          , 0 , 0) ;<- da halt auf den entsprechenden treiber(0-9) ändern
SendMessage_(hWebcam, #WM_CAP_SET_SCALE               , 5 , 0)
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEWRATE         , 1, 0)
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW             , 1 , 0)

FileName.s = "c:\MyCapture.avi"
SendMessage_(hWebcam, #WM_CAP_DLG_VIDEOCOMPRESSION , 1, 0)     ; Dateiformat wählen lassen
SendMessage_(hWebcam, #WM_CAP_FILE_GET_CAPTURE_FILEA, FileName.s, 0)
SendMessage_(hWebcam, #WM_CAP_SEQUENCE, 0, 0) 

Repeat
  SendMessage_(hWebcam, #WM_CAP_COPY_EDIT ,1 , 0)
  Event = WindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      Quit = 1
  EndSelect
Until Quit = 1
; Aufnahme stoppen
SendMessage_(hWebcam, #WM_CAP_STOP, 0, 0)
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW       , 0, 0)
SendMessage_(hWebcam, #WM_CAP_DRIVER_DISCONNECT, "BLUBBER", 0)
CloseWindow(0)
CloseLibrary(0)
EndIf
End
mit der Zwischenablage könnte ich ja dann das Bild auch mit jpg kompriemieren und über LAN versenden.

Geht das auch mit "hWebcam, #WM_CAP_SEQUENCE, 0, 0"

Auserdem wird nur kurz afgezeichenet, die längste Datei war 44s, ist das bei euch auch?
MfG Rothammel
Antworten