Seite 2 von 2

Re: webcambilder streamen

Verfasst: 28.09.2014 22:48
von Moxl
ah okay wunderbar vielen dank.
ich werde den code in nächster zeit mal ausprobieren und weiter dran arbeiten.

Dankeschön :allright:

Re: webcambilder streamen

Verfasst: 02.10.2014 23:47
von Moxl
also bei mir funktioniert der code leider nicht... es öffnet sich nur ne abfrage welche webcam ich benutzen will und dann das leere fenster. :|

Re: webcambilder streamen

Verfasst: 10.10.2014 07:42
von andi256
Hallo

ich bin damals einen anderen Weg gegangen. Bei meinen unvollendeteten Projekt (Tracking Software für Teleskop) wollte ich anhand einer Webcam einen Stern fixieren und anhand diesen Stern das Teleskop nachführen.

wie sich herausstellte, war meine (CAM) ziemlich zickig ... daher bin ich den weg über DDShow gegangen...

hab leider jetzt den Code zur CAM nicht zur Hand ...(kann ich bei interesse nachreichen) ... aber lief im Prinzip so ab

habe mir über GraphEdit ... einen passenden graphen gebastelt und diesen per PB nachgebaut. Das Stichwort zum Snappen der Bilder ist "samplegrapper" dieser muss noch in den graphen ergänzt werden. Um ein speicherbares Bild bmp zu erhalten muß man noch den BMP header ergänzen ....

Hat eigentlich sehr gut geklappt.

analogie zur Filtergraphen:

Code: Alles auswählen

file.s = "D:\1.avi"    ; anpassen

#CLSCTX_INPROC_SERVER        = $1
#MAX_FILTER_NAME             = 128
Structure FilterInfo
 achName.b[#MAX_FILTER_NAME]
 lpFilterGraph.IFilterGraph
EndStructure

Enumeration
 #PINDIR_INPUT
 #PINDIR_OUTPUT
EndEnumeration

CoInitialize_(0)
CoCreateInstance_  (?CLSID_FilterGraph, #Null,#CLSCTX_INPROC_SERVER,?IID_IGraphBuilder,@lpGB.IGraphBuilder)
lpGB\QueryInterface(?IID_IMediaControl,@lpMC.IMediaControl)
CoCreateInstance_  (?CLSID_Source_Filter, #Null, #CLSCTX_INPROC_SERVER,?IID_IBaseFilter,@lpSource_Filter.IBaseFilter)
CoCreateInstance_  (?CLSID_VideoRenderer, #Null, #CLSCTX_INPROC_SERVER,?IID_IBaseFilter,@lpVRender.IBaseFilter)

; SOURCE Filter
Dim wavFile.w(Len(file))
MultiByteToWideChar_(#CP_ACP, 0, file, -1, wavFile(), Len(file))
lpGB\AddSourceFilter(@wavFile(), @wavFile(), @lpSource_Filter)
lpSource_Filter\EnumPins(@lpNUM.IEnumPins)
While lpNUM\Next(1,@lpPin.IPin,0) = #S_OK
 lpPin\QueryDirection(@a)
 If a = #PINDIR_OUTPUT
  lpSource_FilterPinOut = lpPin
 EndIf
Wend

; Renderer
lpGB\AddFilter(lpVRender, @"Video_Renderer")
lpVRender\EnumPins(@lpNUM.IEnumPins)
While lpNUM\Next(1,@lpPin.Ipin,0) = #S_OK
 lpPin\QueryDirection(@a)
If a =  #PINDIR_INPUT
 lpVRenderPinIn = lpPin
EndIf
Wend

; Pins verbinden
lpGB\Connect(lpSource_FilterPinOut,lpVRenderPinIn)

; Verwendete Filter anzeigen
lpGB\EnumFilters(@lpEnum.IEnumFilters)
While lpEnum\Next(1,@lpFilter.IBaseFilter,0) = #S_OK
 lpFilter\QueryFilterinfo(@info.FilterInfo)
 Debug PeekS(@info\achName)
Wend

; Wiedergabe starten
lpMC\Run()

OpenWindow(0,500,500,100,100,"Test")
Repeat
  Select WindowEvent()
    Case 0 
      Delay(1)
    Case #PB_Event_CloseWindow
      quit = #True
  EndSelect 
Until quit = #True

; Freigabe
lpFilter\Release()
lpEnum\Release()
lpPin\Release()
lpNUM\Release()
lpVRender\Release()
lpSource_Filter\Release()
lpMC\Release()
lpGB\Release()
CoUninitialize_()

DataSection
 CLSID_FilterGraph:
 Data.l $E436EBB3
 Data.w $524F,$11CE
 Data.b $9F,$53,$00,$20,$AF,$0B,$A7,$70
 IID_IGraphBuilder:
 Data.l $56A868A9
 Data.W $0AD4,$11CE
 Data.b $B0,$3A,$00,$20,$AF,$0B,$A7,$70
 CLSID_Source_Filter:
 Data.l $D3588AB0
 Data.w $0781,$11CE
 Data.b $B0,$3A,$00,$20,$AF,$0B,$A7,$70
 IID_IBaseFilter:
 Data.l $56A86895
 Data.w $0AD4,$11CE
 Data.b $B0,$3A,$00,$20,$AF,$0B,$A7,$70
 CLSID_VideoRenderer:
 Data.l $70E102B0
 Data.w $5556,$11CE
 Data.b $97,$C0,$00,$AA,$00,$55,$59,$5A
 IID_IMediaControl:
 Data.l $56A868B1
 Data.w $0AD4,$11CE
 Data.b $B0,$3A,$00,$20,$AF,$0B,$A7,$70
EndDataSection
mfg
Andi256