webcambilder streamen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: webcambilder streamen

Beitrag von Moxl »

ah okay wunderbar vielen dank.
ich werde den code in nächster zeit mal ausprobieren und weiter dran arbeiten.

Dankeschön :allright:
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: webcambilder streamen

Beitrag 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. :|
andi256
Beiträge: 100
Registriert: 06.11.2004 11:23
Computerausstattung: PB 5.30 (x64) Win7
Wohnort: Österreich

Re: webcambilder streamen

Beitrag 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
Antworten