This project's goal is to synchronize frame-accurate playback for an array of twelve (12) ARM-based clients (CubieTrucks running Cubiuntu, based on Ubuntu linux). Each client will display a 1080p (1080x1920, 24-30fps) image via a video projector. The array of twelve projectors, together, creates a single panoramic image on a cylindrical projection screen.
Current status: I have set up working network sync via MPlayer (see below); the results seem promising but need tuning and testing, described below. Alternatively, you are welcome to suggest another approach (suggestions are at the bottom of this page).
0. Diagnose MPlayer playback in Cubiuntu (a linux distro for CubieTruck); if necessary, compile MPlayer with vdpau support for Mali 400 GPU running under Cubiuntu. Current status: MPlayer performs badly compared to VLC even though both ostensibly use hardware decoding on the CubieTruck's Mali 400 GPU. See my post here: [url removed, login to view]).
My (simple) steps to set up synchronized playback using MPlayer:
- Run ‘ifconfig’; identify and note Bcast IP, e.g.: "Bcast:[url removed, login to view]"
- On the master (server), run:
mplayer -udp-master -udp-ip [url removed, login to view] -loop 0 [url removed, login to view]
- On each slave, run SMPlayer with the following 'Options:Preferences:Advanced:Options for MPlayer':
-x 1920 -y 1080 -fps 24 -nosound -vo vdpau -vc
ffmpeg12vdpau,ffh264vdpau -loop 0 -udp-slave
Note: “Seeking, pausing and even playback speed adjustment (see the -input option) can be done on the master, and all the slaves will follow. When the master exits, it sends out a "bye" message which causes the slaves to exit as well.”
1. Test video sync with provided [url removed, login to view] video clips. Once you have demonstrated that MPlayer under Cubiuntu renders with GPU support (as above), the next step is to test MPlayer's network sync using multiple slave clients with a server and inspect the video sync produced. If needed, you will modify the open source code for MPlayer and recompile for Cubiuntu on CubieTruck: however, no modification may be necessary. The project can be turned in when you can demonstrate that consistent frame-accurate sync as follows, below.
Requirements: (12) Clients (CubieTruck ARM PCs running Cubiuntu) must stay in sync at 24fps (minimum) for a minimum of 10 minutes, as the looping media for this project is approximately this length. It is acceptable to reset the server and client playback every ~10 minutes if needed, provided there is no video output during this process. Any pause for reset between video loops should not exceed ~5 seconds,
Additional detailed project notes are available once you begin, but the total requirements for completion are encapsulated above.
Alternative work scope notes:
0. On paper, VLC's 'netsync' looks like it's designed to allow for frame-accurate multi-client sync, but it is far from clear if it will work in production, as you can see in my VideoLAN post here:
[url removed, login to view] If you believe the VLC approach has merit, you could write a new wrapper to control VLC playback -- see the above forum link for details.
1. You are welcome to use another CubieTruck distribution than Cubiuntu, if you prefer. Cubiuntu seems to have the most mature support for hardware decoding of video, however.
Thanks for considering this project!