- NB: Document updated for OpenViBE 1.2.2 (26.Oct.2016).
There are various ways to stream data and events (stimulations) between OpenViBE and external applications in real time. For example, classification results can be sent from Designer to control a game, or a robotic arm, and processed data can be forwarded for making custom visualizations, etc. With each technique, you’ll have to implement a corresponding receiving or sending capability in your application or device. Below, you’ll find links to some documentation to assist in this.
Note for time-critical applications: with applications such as P300, the developer often needs to tag the EEG stream with the occurred events, such as the P300 flashes. The currently recommended way to do this is that the event-triggering application (or box) sends each marker to the Acquisition Server immediately after the event rendering has occurred using the TCP Tagging technique. Acquisition Server will then append the markers to the stream as stimulations. The alternative is to use hardware tagging, and send the markers directly to the amplifier. Note that it may not be time accurate to send this kind of markers to the Designer from your application.
The commonly used techniques to transmit information from/to the OpenViBE Designer in real time are the following,
The classic OpenViBE way to send stimulations and data to external applications is the VRPN protocol. See the tutorial here. It is not very convenient for sending multichannel data, but for stimulations it is appropriate. VRPN can also receive stimulations and small-scale numeric data into OpenViBE.
Data and stimulations can also be sent using the TCP/IP protocol, if no ‘exotic’ dependencies are wanted. The TCP/IP can also be more efficient if large amounts of data are to be sent. The corresponding box is called the TCP Writer. In Acquisition Server, the Generic Telnet Reader driver can receive signal data over TCP/IP. The telnet driver can be configured to accept the TCP Writer box stream format.
LabStreamingLayer is another protocol for exchanging data and stimulations between streaming applications. It can be used with a corresponding box, see here for a description. OpenViBE Acquisition Server also has LSL plugins both to receive and send numeric data and stimulations.
OpenSoundControl is usually used to control synthetizers, but can also be used as a general output channel for anything that can receive data from an OSC controller. For details, see the box documentation. At the moment OSC is not able to receive data into OpenViBE.
Python and Matlab
Using either the Python box or the Matlab box, it is possible to stream data and stimulations to/from an application using some further communication mechanism that has been implemented in these languages. There can be some overhead from the run-time interpretation of the scripts, and in general from having this kind of ‘middle layer’.
The Lua Stimulator box allows sending and receiving stimulations from Lua scripts. The box does not currently support any other type of data.
Other techniques / Do-It-Yourself
With C++, you can of course implement whatever communication channel you desire by developing the corresponding box or driver. You can use the source codes of the boxes mentioned above as starting points.
It is sometimes asked if the serial port or parallel port can be used to send data or stimulations to. This is not currently supported, as there is no standard what to write to the serial port. If a serial port communication is needed, the user is recommended to write their own box sending stimulations to the serial port in a desired manner. In C++, the Stimulation Listener box code can be used as a starting point, and you can try to combine it with a serial port library such as inpout32 (on Windows).