 |
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.
|
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
|