Blog related to my Google Summer of Code project at NUIGroup
We are ready to release the alpha version of CCVMultiplexer. It can be downlaoded from
This version is bundled with the existing CCV1.5
That means you can also use the CCV1.5 features if you dont want to use the multiplexer functionality.
I am considering you are well versed with using a normal CCV 1.5, so i’ll straight away point the differences.
In the zip file, you will find a “data/xml” folder. Two new additions have been made
1)server_settings.xml – this is responsible for server settings, if you are using this CCV instance as a server.
2)client_settings.xml – this is responsible for client settings.
For a particular system, you can have only one server with multiple client nodes! and a computer can act as a server OR a client.
Identify which computers will act as nodes and which one will act as server(the server will run the multitouch application, also it has to combine all the data so choose a powerful computer)
Setting up the server:
In “data/xml/app_settings” turn with value of <IPIMAGE>0<IPIMAGE> to <IPIMAGE>1<IPIMAGE>
IMPORTANT: Do not turn this on if you do not intend to use the multiplexer, as it will result in unnecessary processor usage!
We now look into server_settings.xml.
- serverinport – the port on which the server receives the data.
- serveroutport – the port on which the server sends the frame synchronization data. (frame synchronization is needed so that all the nodes run at the same fps, will write a detailed post on this later)
- numclients – number of expected clients (very important, as equivalent number of images are drawn by the server)
- fps – this is the fps at which all the nodes will run
- broadcast – this is the broadcast address, so that the server sends the data to all the nodes simultaneously
- protocol – you have a choice of using TCP/UDP. With UDP the system works at a greater fps, but if a single packet is lost the whole system stops!(forcing you to restart any client node)
With TCP the system works on a lower fps, but a packet will never be lost because its TCP!
IMPORTANT: For TCP, the server instance of CCV should be started before any client instance of CCV (because tcp client binds to a socket and not a port number) howere with UDP there is no such restriction
Only these parameters are required to turn CCV into a multiplexer. Each node will be like an image, so its exactly similar to CCV 1.5
Setting up the Client:
Setting up client_settings.xml
- client_id – This is very important, each client would have its client_id incremented by 1 starting with 0. That means if you want to use three nodes, node 1 has client_id=0, node 2 has client_id=1 and node 3 has client_id=2. The minimum client_id should always be 0 and no two client should have same client_id.
- ip – this is the ip address of the server.
- serveroutport – port on which the client send the data to the server (serveroutport of client = serverinport of server)
- serverinport – port on which the client listens to the frame synchronization data (serverinport of client = serveroutport of server)
- protocol – choice of protocol TCP/UDP
Client will start running the multiplexer node, if you turn on the toggle switch named CCVMULTIPLEXER
IMPORTANT: The system will only work when all the clients (equal to numclients in server_settings.xml) have been turned ON.
Everything else is common to the existing CCV. you chose which node image to use and in what order they are stitched.
NOTE: For this release the the console is also displayed (for debugging purpose) due to this you will get a low fps, because the application has to print all the data to the console. Future releases will not have this, resulting in a better fps for the sytem.
Any suggestions are appreciated.
Also feel free to point out the bugs.
CCVMultiplexer is my GSoC project for NUI group this year. The need for a network multiplexer arises when building a large Multi-Touch setup.
CCV 1.5 uses multicam approach to do this. With CCVMultiplexer we run multiple instances of CCV on different computers connected over a network. All the instances act as node’s and there blob data is combined by the CCVMultiplexer (the server).
Later posts will discuss how to setup CCVMultiplexer