You could use the -udp-slave option with mplayer, and send the timecode from puredata. Just used that to synchronise 6 video players and it works pretty well. There was no sound played by mplayer in my case but there's no reason it wouldn't work.
The timecode you have to send is just the position in seconds, in bytes. For instance if you make a counter, bang it with a metro at 40ms so you have 25fps counter, then divide by 25 and send through moocow any2bytes and udpsend.
If you want to see the timecode mplayer needs, launch one as udp-master and connect it to pure data through udpreceive.