Anleitung: Einbindung WinGrabEngine.dll in VB6.0 und VB.NET

Digital Recording
slickwilly2000
Interessierter
Interessierter
Beiträge: 56
Registriert: Dienstag 9. April 2002, 20:03

Anleitung: Einbindung WinGrabEngine.dll in VB6.0 und VB.NET

Beitrag von slickwilly2000 »

Anleitung: Einbindung der WinGrabEngine.dll in VB6.0 und VB.NET



für alle, die schon immer mal wissen wollten, wie man die WinGrabEngine.dll von Elminster in VB(.NET) anspricht und vor allem, wie man das CallBack Interface benutzt, hier eine kleine Anleitung. Mein Dank gilt flagg und Co. für die ngrab-sourcen im cvs.



- Die WinGrabEngine.dll dem System bekannt machen: "regsvr32 WinGrabEngine.dll"
- Über "Projekt/Verweis hinzufügen" die WinGrabEngine.dll auswählen
- Damit man die Log-Ausgaben erhält, muß man die -Ex Funktionen nehmen
- Die WinGrabEngine.dll enthält folgende Funktionen:

Code: Alles auswählen

Public Function StartDirectGrabEx(ByVal aIP As String, ByVal aVideoPID As Integer, ByVal aAudioPIDs As Object, ByVal aVideoFileName As String, ByVal aAudioFileNames As Object, ByVal aStripVideoPes As Boolean, ByVal aStripAudioPes As Object, Optional ByVal aCallback As WinGrabEngine.IWinGrabProcessCallback) As WinGrabEngine.WinGrabGrabControl

Public Function StartDirectGrab(ByVal aIP As String, ByVal aVideoPID As Integer, ByVal aAudioPIDs As Object, ByVal aVideoFileName As String, ByVal aAudioFileNames As Object, ByVal aStripVideoPes As Boolean, ByVal aStripAudioPes As Object) As Object

Public Function StartMuxEx(ByVal aVideoFileName As String, ByVal aVideoStartOffset As Integer, ByVal aVideoEndOffset As Integer, ByVal aAudioFileNames As Object, ByVal aMuxFileName As String, ByVal aSplittSize As Integer, ByVal aCallback As WinGrabEngine.IWinGrabProcessCallback) As WinGrabEngine.WinGrabGrabControl

Public Function StartMuxGrabEx(ByVal aIP As String, ByVal aVideoPID As Integer, ByVal aAudioPIDs As Object, ByVal aMuxFileName As String, ByVal aSplittSize As Integer, Optional ByVal aCallback As WinGrabEngine.IWinGrabProcessCallback) As WinGrabEngine.WinGrabGrabControl

Public Function StartMuxGrab(ByVal aIP As String, ByVal aVideoPID As Integer, ByVal aAudioPIDs As Object, ByVal aMuxFileName As String, ByVal aSplittSize As Integer) As Object

Public Function StartMux(ByVal aVideoFileName As String, ByVal aVideoStartOffset As Integer, ByVal aVideoEndOffset As Integer, ByVal aAudioFileNames As Object, ByVal aMuxFileName As String, ByVal aSplittSize As Integer) As Object

Mit folgendem Code kann man nun die WinGrabEngine.dll ansprechen:




Getestet mit VB 6.0

Code: Alles auswählen

Implements IWinGrabProcessCallback
Public WinGrabLibrary As Object
Public WinGrabGrabControl As Object

Private Sub Form_Load()
    
    Dim video As String
    Dim audio(3) As String

    video = "C:\Recording\Kabel_00.vpes"
    audio(0) = "C:\Recording\Kabel_01.apes"
    audio(1) = "C:\Recording\Kabel_02.apes"

    'z.B. zwei PES-Streams (udrec -pes) zu einem PS-Stream muxen
    Set WinGrabLibrary = CreateObject("WinGrabEngine.WinGrabLibrary")
    Set WinGrabGrabControl = WinGrabLibrary.StartMuxEx(video, -1, -1, audio, "C:\Recording\Kabel.mpg", 0, Me)

End Sub

Public Sub IWinGrabProcessCallback_OnMessage(ByVal sMessage As String)
    
    'Log-Ausgabe (sMessage) wird als String übergeben
    
End Sub

Public Sub IWinGrabProcessCallback_OnStateChange(ByVal sName As String, ByVal sState As String)
    
    'Status-Informationen (z.B. "Muxer" sName, "SCR: 00:00:00.480 Syncs: 1" sState) werden jeweils als String übergeben
    
End Sub




Getestet mit VB.NET

Code: Alles auswählen

Public Class WinGrabEngine_Class

    Implements WinGrabEngine.IWinGrabProcessCallback
    Public WinGrabLibrary As Object
    Public WinGrabGrabControl As Object


    Public Sub IWinGrabProcessCallback_OnMessage(ByVal sMessage As String) Implements WinGrabEngine.IWinGrabProcessCallback.OnMessage
	
	'Log-Ausgabe (sMessage) wird als String übergeben

    End Sub

    Public Sub IWinGrabProcessCallback_OnStateChange(ByVal sName As String, ByVal sState As String) Implements WinGrabEngine.IWinGrabProcessCallback.OnStateChange

        'Status-Informationen (z.B. "Muxer" sName, "SCR: 00:00:00.480 Syncs: 1" sState) werden jeweils als String übergeben
	
    End Sub

    Shared Sub Main()

        Dim StartMux As New WinGrabEngine_Class()
        Dim video As String
        Dim audio(3) As String

        video = "C:\Recording\Kabel_00.vpes"
        audio(0) = "C:\Recording\Kabel_01.apes"
        audio(1) = "C:\Recording\Kabel_02.apes"

        'z.B. zwei PES-Streams (udrec -pes) zu einem PS-Stream muxen
        StartMux.WinGrabLibrary = CreateObject("WinGrabEngine.WinGrabLibrary")
        StartMux.WinGrabGrabControl = StartMux.WinGrabLibrary.StartMuxEx(video, -1, -1, audio, "C:\Recording\Kabel.mpg", 0, StartMux)

    End Sub

End Class
miller_bln
Interessierter
Interessierter
Beiträge: 46
Registriert: Dienstag 29. Juli 2003, 19:51

Beitrag von miller_bln »

hi all,

gibt es in der WinGrabEngine.dll auch eine api-function ,
die das senden eines streams an einen http-server ermöglicht ?

der könnte dann z.b. mittels 'vlc.exe -vvv http://127.0.0.1:31337 sout=#duplicate{dst=display}'
vom vlc angezeigt werden.


weiss jemand was drüber ??

gruss
miller
GeminiServer
Neugieriger
Neugieriger
Beiträge: 7
Registriert: Montag 15. April 2002, 15:25

Beitrag von GeminiServer »

Hi,

nun ich würde gerne eine Kleine Doku der dll sehen und ich hasse es in den source rum zu wuchern und dei Funktionen herraus zufinden! Und alles auch noch in Pascal 8)

Es ist zwar schön und gut daß hier alles in VB dargestellt wird, aber hab ihr euch mal gedanken darüber gemacht daß diese dll zwar wurderbar funktioniert aber Ohne doku, ist mann da richtig aufgeschmissen. Ne c source wäre schon mal ein anfang ;)

Egal, ich habe keine Ahnung von Mpeg und der ganzen muxerei und möchte mich da jetzt auch nicht vertieft einarbeiten! Ich will einen Port für XBMCmachen und deswegen wäre es wirklich gut von euch etwas hilfe zu bekommen! Ansonsten bin ich aufgeschmisse ;). BTW: Bin Grad dabei die source zu sammeln More!

1. Vpid und Apid string einbinden ?
2. Gemuxter Stream ? Ausgabe String ?
3. etc.

Ihr wisst schon was ich meine! Wäre für jede Hilfe Dankbar!

Gruß
GeminiServer
Zuletzt geändert von GeminiServer am Mittwoch 14. April 2004, 17:05, insgesamt 1-mal geändert.
- no matter what - do IT -
GeminiServer
Neugieriger
Neugieriger
Beiträge: 7
Registriert: Montag 15. April 2002, 15:25

Beitrag von GeminiServer »

[quote="GeminiServer"][/quote]
slickwilly2000
Interessierter
Interessierter
Beiträge: 56
Registriert: Dienstag 9. April 2002, 20:03

Beitrag von slickwilly2000 »

Hi,


die WinGrabEngine kann genau das, was das Programm WinGrab selbst kann. Nicht mehr und auch nicht weniger. Deshalb erstmal das Programm nehmen und ausloten, was es alles kann/nicht kann.

Im Object-Browser von VisualStudio.Net kann man sehr schön alle Funktionen einsehen. Das sind genau jene, die ich oben schon gepostet habe.

Code: Alles auswählen

gibt es in der WinGrabEngine.dll auch eine api-function , 
die das senden eines streams an einen http-server ermöglicht ? 
Wenn ich dich richtig verstanden habe, dann möchtest du mit dem VideoLAN-Client deinen Stream anschauen?
Falls ja, dann würde ich so vorgehen, wie ich es mit WinGrab selbst machen würde. Einfach die Ausgabedatei als leer definieren (""). Dann kann man den Stream über http://ipcomputer:31337 anschauen.



Hi,

nun ich würde gerne eine Kleine Doku der dll sehen und ich hasse es in den source rum zu wuchern und dei Funktionen herraus zufinden! Und alles auch noch in Pascal

Es ist zwar schön und gut daß hier alles in VB dargestellt wird, aber hab ihr euch mal gedanken darüber gemacht daß diese dll zwar wurderbar funktioniert aber Ohne doku, ist mann da richtig aufgeschmissen. Ne c source wäre schon mal ein anfang

Egal, ich habe keine Ahnung von Mpeg und der ganzen muxerei und möchte mich da jetzt auch nicht vertieft einarbeiten! Ich will einen Port für XBMC machen und deswegen wäre es wirklich gut von euch etwas hilfe zu bekommen! Ansonsten bin ich aufgeschmisse . BTW: Bin Grad dabei die source zu sammeln More!

1. Vpid und Apid string einbinden ?
2. Gemuxter Stream ? Ausgabe String ?
3. etc.

Ihr wisst schon was ich meine! Wäre für jede Hilfe Dankbar!

Gruß
GeminiServer

Also ich finde deine Aussagen schon ziemlich heftig! Ich hab mal mit Elminster gesprochen und der hat sich über 1,5 Jahre durch die Mpeg2-Dokumentationen geangelt. Er hat's nun mal in Pascal geschrieben und nicht in C, basta.
Wozu brauchst du ne Doku?? Alle Funktionen, die du ansprechen kannst, habe ich oben gepostet! Und das gute an ner DLL ist doch, dass man es aus mehreren Programmiersprachen ansprechen kann.


bye
slickwilly2000
miller_bln
Interessierter
Interessierter
Beiträge: 46
Registriert: Dienstag 29. Juli 2003, 19:51

Beitrag von miller_bln »

slickwilly2000 hat geschrieben: Wenn ich dich richtig verstanden habe, dann möchtest du mit dem VideoLAN-Client deinen Stream anschauen?
Falls ja, dann würde ich so vorgehen, wie ich es mit WinGrab selbst machen würde. Einfach die Ausgabedatei als leer definieren (""). Dann kann man den Stream über http://ipcomputer:31337 anschauen.
falsch verstanden :)

habe eine art 'wingrabtv' in vb gecodet.. ohne wingrablibrary...
nur mit winsock ... kann zappen, ich empfange auch den stream..kann diesen
auch abspeichern und ansehen ... wenn ich diesen stream aber via eines weiteren winsocks (als server konfiguriert, listen port
31337) 'bereitstelle' , kann ich mit vlc nicht darauf zugreifen.
ich vermute, die synchronisation fehlt ??!!

deshalb also die frage, nach ner api .
ich würde dann notgedrungen doch die wingrab nehmen ... zumindest für die http-server funktion .

habe ich mich jetzt deutlich genug ausgedrückt ??

gruss
miller
slickwilly2000
Interessierter
Interessierter
Beiträge: 56
Registriert: Dienstag 9. April 2002, 20:03

Beitrag von slickwilly2000 »

Hi

jetzt komm ich mit. Eine Antwort kann ich dir aber nicht geben. Da bin ich leider überfragt.


bye
slickwilly2000