synchronizing videos with multiple computers

hi all :wink:

i’m willing to build a system able to synchronize as precisely as possible a large video wall composed by N computers with N projectors.

i’ve been playing with something like this trough osc . i made an app which was sending the master frame number to all the video “slaves” every 35 frames. This worked quite good, the videos were almost in sync even they were running into diferent hardwares. But i’m willing to make this a bit better and i’m wondering which could be the best solution.

I’ve different approaches to think about :

  • (as i tried) master sends framenumber to all slaves every N frames, as fast as possible the slaves corrects it’s framenumber straight away.

  • master sends a “play” time and all the computers “calculate” they frame from that data and starts when needed. This will require to be able to put the same time on all computers as much precise as possible. I’ve google that and found NTP (Network Time Protocol), seems to be a lib to make computers from a network work on the same relative time.

Wikipedia says :

  
NTPv4 can usually maintain time to within 10 milliseconds (1/100 s) over the public Internet, and can achieve accuracies of 200 microseconds (1/5000 s) or better in local area networks under ideal conditions.  
  

So then if i can assure that all computers are syncronized in the same relative time line and they will be starting to “PLAY” at the same relative time, it’s all about knowing on every main loop on every computer which frame is needed at a given length of the video …

Any thoughts if that’s a seemless idea ? Will it work ?

Any other ways to achieve several computer playing videos in “perfect” synch ?

thnkx

You can take a look at, if you haven’t already:
http://code.google.com/p/mostpixelsever/

Cheers

Maybe of interest:
http://nimk.nl/syncstarter
http://piksel.no/pipermail/piksel/2010–…-45203.html

Also:
www.equalizergraphics.com

hola rodrigo and grimus …

i’ve downloaded MPE and give it a try but i run into some problems …
basically what i did is modify the MPEclient OF example …
i took out everything related with balls.cpp and replaced with :

in setup.h

  
public :  
        ofVideoPlayer video;  
  

in setup at testApp.cpp

  
...  
   video.loadMovie("comp1.mov");  
    video.play();  
	// start client  
    client.start();  
}  
  

in draw at testApp.cpp

  
void testApp::draw() {  
    if (client.isRendering()) {  
        // before we do anything, the client must place itself within the  
        //  larger display (this is done with translate, so use push/pop if  
        //  you want to overlay any info on all screens)  
        client.placeScreen();  
        // clear the screen  
        ofBackground(255, 255, 255);  
  
        video.draw(0,0,400,400);  
        video.play();  
        // alert the server that you've finished drawing a frame  
        client.done();  
    }  
}  

in frameEvent() in testApp.cpp

  
void testApp::frameEvent() {  
    // read any incoming messages  
    if (client.messageAvailable()) {  
        video.idleMovie();  
    }  
}  
  

what’s happenning …

* the client1 is not rendering properly the video texture ?¿
* on client0 there are some occasional white line flickering arround (the small line on my screen capture image below)
* the video is not playing totally smooth … it’s making some kind of “stops” every now and then . not a smooth video playback at all … not acceptable.

i’ve checked client0 and client1 folders, videofiles and XMLs … all seems ok …
( i’m on WindowsXP 32 and CodeBlocks )

anyone has tried MPE with a video player synched ? anyone got this strange artifacts ? maybe in osx works better then this ?

thanks a lot