STARTSEITE PRODUKTE DIENSTLEISTUNG REFERENZEN ÜBER UNS KONTAKT
 Archiv-Box
 Sync-Tool
 ELEC
 
 ActiveX
    MenuX.Ocx
    Storage.Ocx
    Video.Ocx

 Impressum
 Datenschutz
 Kontakt

 © 2017




 

Video.Ocx

Sammlung von 6 ActiveX-Controls für die Video-Übertragung

Das VideoCapture-Control liefert die Kamera-Bilder. Diese können anschließend entweder direkt mit dem VideoShow-Control dargestellt werden. Alternativ können die einzelnen Bilder mit dem Codec-Control kodiert, mit dem FrameControl-Control in einen gesicherten Byte-Strom und mit dem ConstantRate-Control über das Internet übertragen werden. Auf der Empfängerseite nehmen die Daten den umgekehrten Weg vom ContantRate-Control über das FrameControl-Control und Codec-Control zum VideoShow-Control.

Download
video.zip (video.ocx; VB5-Beispielanwendung; IE4-Beispielanwendung)

 Lizenz
Lizenzgebühr: 25 EURO (inkl. MWSt.)


Beschreibung

VideoCapture-Control
Nach dem Setzen der Capture-Eigenschaft auf True (zur Laufzeit) werden die von der Kamera erhaltenen Bilder im Control dargestellt und für jedes Bild wird das OnFrame-Ereignis ausgelöst. Die so erhaltenen Bilder können an das Codec-Control, an das FrameControl-Control oder an das VideoShow-Control weitergereicht werden.
   Sub VideoCapture1_OnFrame(ByVal bmph As Long, ByVal data As Long, ByVal size As Long)
   Codec1.EncodeFrame bmph, data, size
   End Sub
Codec-Control
Durch Aufruf der EncodeFrame-Methode kann jeder in Windows verfügbare (siehe Systemsteuerung/Multimedia) Video-Codec verwendet werden (siehe Code oben). Die Auswahl des Coders erfolgt entweder zuvor vom Benutzer manuell über eine Dialogbox (Darstellung mit der SelectCodec-Methode) oder durch direkte Zuweisung der Codec-Kennung an die Codec-Eigenschaft. Für jedes fertig komprimierte Bild wird das OnFrame-Ereignis ausgelöst. Die so erhaltenen Bilder können an ein weiteres Codec-Control (zum Dekodieren) oder an das FrameControl-Control (zum Verpacken für's Versenden) weitergereicht werden.
   Sub Codec1_OnFrame(ByVal bmph As Long, ByVal data As Long, ByVal size As Long)
   FrameControl1.SendFrame bmph, data, size
   End Sub
Das Dekodieren von Bildern erfolgt analog mit der DecodeFrame-Methode, wobei der passende Codec automatisch gewählt wird.

FrameControl-Control
Die Aufgabe des FrameControl-Control besteht in darin, das Bild (bestehend auf dem Header und den Bilddaten) zum Senden über ein Netzwerk in einen Fehler-unempfindlichen Datenstrom umzuwandeln um nach dem Empfangen wieder in das Bild zurückzuwandeln. Das Senden erfolgt mit der SendFrame-Methode (siehe Code oben), welche evtl. mehrere Datenblöcke generiert, die im ReadyToSend-Ereignis zum Senden bereitgestellt werden:
   Sub FrameControl1_ReadyToSend(ByVal data As Long, ByVal size As Long)
   l& = ConstantRate1.Send(data, size)   'Wenn l&=0: Puffer voll
   End Sub
Auf der Empfängerseite empfangene Pakete müssen einem FrameControl-Control per Receive-Methode übergeben werden. Diese Methode liefert als Rückgabewert die Anzahl der verwerteten Bytes. Bei jedem vollständig erkanntem Bild wird das OnFrame-Ereignis ausgelöst, welches es ermöglicht, das Bild zum Dekodieren oder zum sofortigen Anzeigen weiterzureichen.
   Sub ConstantRate1_Receive(ByVal data As Long, ByVal size As Long)
   Do
      s& = FrameControl2.Receive(ConstantRate1.data1, ConstantRate1.size1, ConstantRate1.data2, ConstantRate1.size2)
      ConstantRate1.Taken s&
   Loop While s&
   End Sub

   Sub FrameControl2_OnFrame(ByVal bmph As Long, ByVal data As Long, ByVal size As Long)
   Codec2.DecodeFrame bmph, data, size
   End Sub
ConstantRate-Control
Das ConstantRate-Control ermöglich die Übertragung von Daten über ein IP-Netzwerk mit konstanter Datenrate (dies ist ein allgemeines Ziel bei Multimedia, da meist eine bestimmte Bandbreite zur Verfügung steht, die erstens nicht überschritten werden darf und es zweitens Verschwendung wäre, sie nicht vollständig auszunutzen). Dieses Control arbeitet unabhängig von der Anwendungsart (auch hier sind die Videobilder ja bereits durch das FrameControl-Control in einen Bitstrom zerlegt). Als Typen stehen UDP/IP (verbindungslos; bietet sich für Videobilder an, da bei einem Verlust von einigen Bytes das wiederholte Senden wenig Sinn macht - es stehen ja genügend neue und aktuellere Daten bereit. Das FrameControl-Control kümmert sich auf der Empfangsseite für die Fehlererkennung) und TCP/IP (verbindungsorientiert) zur Verfügung (Type-Eigenschaft).

Nach Einstellung der DataRate-, der Host-, der Port- sowie der Type-Eigenschaft und Festlegen der Puffergröße mit der BufferSize-Eigenschaft kann das Senden mit dem Setzen der Sending-Eigenschaft (zur Laufzeit) auf True gestartet werden. Daten können mit der Send-Methode (siehe Code oben) in den Puffer eingetragen werden. Das Control kümmert sich selbständig um das Senden mit der eingestellten Datenrate.
Der Empfänger muß analog die Eigenschaften Port, Type und BufferSize einstellen und mit der Zuweisung von True an die Receiving-Eigenschaft (zur Laufzeit) in den Empfangsmodus gehen. Empfangene Daten werden durch ein Receive-Ereignis (siehe Code oben) mitgeteilt. Die Taken-Methode gibt die im Parameter übergebende Anzahl Bytes im Puffer frei.

VideoShow-Control
Das VideoShow-Control ermöglicht mit Hilfe der Draw-Methode das Anzeigen eines Bildes.
   Sub Codec2_OnFrame(ByVal bmph As Long, ByVal data As Long, ByVal size As Long)
   VideoShow1.Draw bmph, data
   End Sub
Command-Control
Das Command-Control erlaubt eine einfache Befehlsübermittlung per TCP/IP (z.B. für Steuerungszwecke). Der Empfänger muß mit der Zuweisung einer Portnummer an die ListenPort-Eigenschaften (zur Laufzeit) in den Empfangsmodus gehen. Der Sender kann daraufhin mit der SendCommand-Methode einen String an den anderen Rechner schicken. Der Empfänger erhält diesen String sowie den Namen des Senders im OnCommand-Ereignis mitgeteilt.

Details

RT = nur zur Laufzeit ; RO = schreibgeschützt 
VideoCapture-Control
Eigenschaften:
Capture  "Hauptschalter", schaltet die Aufnahme ein True/False RT
PreviewRate bestimmt die Wiederholrate in ms der Vorschau. =0 schaltet die Vorschau aus. Integer  
DeviceNr  wählt eine Kamera aus; Wertebereich 0 bis 9 Integer  
DeviceName (nr As Integer)  gibt die Bezeichnung der Kamera (nr=0...9) zurück String  
AutoSize  falls True: paßt Width/Height an Kamera an True/False  
Stretch  falls True: paßt Preview-Kamerabild an Width/Height an True/False  
CaptureWidth  Breite des aktuellen Kamerabildes Long RT, RO
CaptureHeight  Höhe des aktuellen Kamerabildes Long RT, RO
DlgFormatQuery  True, falls gewählter Treiber einen Format-Dialog hat True/False RT, RO
DlgSourceQuery  True, falls gewählter Treiber einen Source-Dialog hat True/False RT, RO
DlgDisplayQuery True, falls gewählter Treiber einen Display-Dialog hat True/False RT, RO
Compression Komprimierung der Kamera-Bilder String RT,RO
Colors Farbtiefe in Bit der Kamera-Bilder Long RT,RO
hWnd Window-Handle des Capture-Fensters Long RT, RO
BackColor  legt die Hintergrundfarbe fest Long  
Methoden:
DlgFormat ruft den Format-Dialog auf
DlgSource ruft den Source-Dialog auf
DlgCompression ruft den Compression-Dialog auf
DlgDisplay ruft den Display-Dialog auf
PlayAvi (Filename$)  Spielt Avi ab (OnFrame-Events)
PlayAviLoop (Filename$)  Spielt Avi in Endlosschleife ab (OnFrame-Events)
StopAvi Stoppt den Avi
CaptureSingleFrame (Filename$)  Speichert einen Frame in Avi
CaptureSequenceStart (Filename$)  Startet speichern in Avi
CaptureSequenceStop Beendet speichern in Avi
AboutBox Copyright-Dialogbox
Ereignisse:
OnFrame (bmph&, data&, size&)  neues Bild steht bereit
Resize (x&, y&)  Bild hat neue Größe
Fehlermeldungen:
Capture Not Active
Unable to Connect Capture Driver
Dialog Not Available
1101
1102
1103
 
Codec-Control
Eigenschaften:
Codec  Liest / Setzt den Coder-Vierbuchstaben-Code ( ""=kein Coder gewählt) String RT
Quality  Angabe der Qualität ( 0 ... 10000 ) Integer RT
KeyFrame  Angabe, der wievielte Frame jeweils ein KeyFrame (=unabhängig vom Vorbild) ist Integer RT
FrameNr  Nummer des aktuellen Frames ( 0 ... KeyFrame-1 ) Integer RT, RO
MaxSize gibt die maximale Größe des kodierten Bildes an Long RT, RO
Methoden:
EncodeFrame (bmph&, data&, size&)  Kodiert ein Bild
DecodeFrame (bmph&, data&, size&) Dekodiert ein Bild
SelectCodec Wählt einen Coder per Dialogbox
NoCodec Wählt keinen Coder (Ausgang=Eingang)
AboutBox Copyright-Dialogbox
Ereignisse:
OnFrame (bmph&, data&, size&)  fertig (de-)kodiertes Bild
Resize (x&, y&) Bild hat neue Größe
Fehlermeldungen:
Format Not Supported
Unable to Open the following Codec: ....
Compress-Error
Decompress-Error
Invalid Parameter
1201
1202
1203
1204
1205
 
  FrameControl-Control
Methoden:
SendFrame (bmph&, data&, size&) Bereitet Bild zum Senden vor (gesicherter Bitstrom)
Receive (data1&, s1&, data2&, s2&)  Wandelt den Bitstrom ins Bild zurück
AboutBox Copyright-Dialogbox
Ereignisse:
ReadyToSend (data&, size&)  size& Bytes stehen an Adresse data& zum Senden bereit
OnFrame (bmph&, data&, size&) Im empfangenen Bitstrom wurde ein Bild erkannt
FrameLost Im empfangenen Bitstrom wurde ein Bildanfang erkannt; Bild ist aber nicht vollständig
 
  ConstantRate-Control
Eigenschaften:
Sending  "Hauptschalter" für's Senden True/False RT
Receiving  "Hauptschalter" für's Empfangen True/False RT
Host  Zielrechner beim Senden ( ""=Broadcast ) String  
Port  Zielport beim Senden / Port für's Empfangen Integer  
Type  0=UDP/IP, 1=TCP/IP Integer  
DataRate  Datenrate in bit/s Long  
BufferSize  Größe des Puffers in Bytes Long  
BufferFilled  Gibt an, zu wieviel Prozent der Puffer gefüllt ist Integer RT, RO
BlockSize  Blockgröße beim Senden/Empfangen Long  
PeerName  Emfänger kann hiermit den Hostnamen des Senders abfragen String RT, RO
Data1 Startadresse Adressbereich 1 Long RT, RO
Data2 Startadresse Adressbereich 2 Long RT, RO
Size1 Länge Adressbereich 1 Long RT, RO
Size2 Länge Adressbereich 2 Long RT, RO
Methoden:
r% = Send (data&, size&)  Trägt size& Bytes ab Adresse data& zum Senden in den Puffer ein. Wenn der Rückgabewert False ist, dann ist der Puffer überfüllt.
Taken (size&)  Gibt die ersten size& Bytes im Empfangspuffer frei
MessageBox (txt$, flag%, caption$)  Gibt eine MessageBox aus
(muß im Disconnect-Ereignis verwendet werden - Der MsgBox-VB-Befehl funktioniert aus unbekannter Ursache nicht!)
ClearBuffer Löscht den Puffer
AboutBox Copyright-Dialogbox
Ereignisse:
Receive (data&, size&)  size& Bytes wurden empfangen; stehen an Adresse data&
Overflow Puffer überfüllt
Disconnect TCP-Empfänger hat Verbindung geschlossen
Fehlermeldungen:
Unable to Connect
Unable to Bind
Unable to Start Sending
Unable to Start Receiving
Sending and Receiving not possible
1401
1402
1403
1404
1405
 
  VideoShow-Control
Eigenschaften:
AutoSize  falls True: paßt Width/Height dem Bild an True/False  
Stretch  falls True: paßt Bild an Width/Height an True/False  
AutoRedraw  falls True: Bild wird zum Wiederaufbau gespeichert True/False  
BackColor  Hintergrundfarbe Long  
Methoden:
Draw (bmph&, data&) Zeichnet das Bild
Picture(bmph&, data&) Erzeugt ein VB-kompatibles Picture
AboutBox Copyright-Dialogbox
Ereignisse:
Resize Bild hat eine neue Größe
 
Command-Control
Eigenschaften:
ListenPort  Server-Port (0=offline) Integer RT
Answer Antwort des Servers an den Client String RT
MyIP Eigene, wenn verfügbar öffentliche IP-Adresse String RT, RO
Methoden:
SendCommand (host$, port%, txt$)  Sende Befehl txt$ an Rechner host$:port%
DNS(adr$) Umwandlung IP <-> DNS-Name
AboutBox  Copyright-Dialogbox
Ereignisse:
OnCommand (peername$, txt$)  von Rechner peername$ kommt der Befehl txt$
Fehlermeldungen:
Unable to Connect
Unable to Bind
1601
1602