PiCam doesn't always start
Sometimes the display flashes between the changed vt and the X vt and then the screen goes blank. When this happens the player is running but not displaying.
I think the reason for this may be the usleep(500) after the chvt() call when the player is being launched. The usleep() is in nanoseconds, so this is probably not long enough. A 250ms sleep (aka usleep(250000)) would not be noticed by the user and probably be enough to avoid this issue.
The same usleep(500) is in videofe.