*NOTE:* I am currently in the process of re-working this as I work on figuring out the exact feature set and get things finalized (see the end section for current ideas and such).
Most basic features are working now and we are mainly changing behaviors and options to figure out the best way to handle the videos and images.
Just be aware that much of this document may be out of date and not accurately reflect the current feature set and behavior.
The college I work at currently has an old letter board display in the entryway where they list some current events, names of visitors, etc.
They have recently decided that they would like a digital sign system there instead.
Being the Assistant to the CTO, the job falls to me to figure out how to do this without us having to buy a specialized box.
We are currently using a 32” LCD TV running at 1280×1024.
The control laptop is currently an Acer Travelmate 270 (P4 1.6Ghz, 512MB RAM), but that may change.
The Acer works, but isn't exactly the best at processing videos and can't handle high res videos in some formats very well.
The current box also seems to lose its network connection at times, but we think that may be a hardware issue with the box itself - we know the box is a bit flaky.
Linux is the base OS of course (in our case, Gentoo because that's what I like).
Images are converted to mpg files using mjpegtools and ffmpeg.
Video files are processed using ffmpeg.
Video files will be checked with midentify (part of the mplayer package) to ensure they are at the proper resolution (and to avoid re-encoding things that are).
We have tty2 set to auto-spawn X11 (requires mingetty).
We are using fluxbox with a plain black background and no panel as the window manager.
Mplayer (NOT gmplayer or another frontend) runs in slave mode from a script that fluxbox starts in its init file.
The file processing and mplayer launching scripts are perl.
The frontend is a php script running under Apache (any httpd that works with php and can exec system commands should work).
(Still in process - see bottom section for what I am trying to do with it - some things are implemented now, some aren't)
I have the file conversion script working mostly now.
It will convert an image or video to a 720p video.
The image processing handles the duration setting in the filename.
It checks videos first to make sure they are not already 720p to avoid re-encoding them.
The conversion script is now setup to copy/move/delete files for a digital sign setup if desired.
This is simply a wrapper script for mplayer.
It has a variable as to whether you want mplayer to loop or not.
If the variable is 1, it starts mplayer in slave mode with the proper playlist in loop mode and will restart it when mplayer exits (such as after a single file play command is sent).
If the variable is set to 0, it starts mplayer in slave mode with the proper playlist in non-loop mode and then exits when mplayer exits.
(In Progress)
This script will control control mplayer running in slave mode via a fifo file.
I believe I have this fully working now, but need to test more and see if we want any more features.
*UPDATE:* This is out of date, I will redo this section.<br> (Copied from the document I have been writing/working in and tweaked a tad)
Filesystem Layout for Digital Sign System Base Working Directory /Sign Directory that holds Incoming Content /Sign/incoming_content dbcadd1.avi announcement.mpg movemakingdemo.flv visitorwelcome010408.jpg Directory holding content that is currently being used /Sign/current_content playlist.txt dbcwelcome.avi happybirthdayjackie.mpg visitorwelcome010308.avi Directory to store files that have been converted to videos /Sign/converted_files visitorwelcome010208.jpg visitorwelcome010308.jpg Directory to hold content no longer being used /Sign/old_content visitorwelcome010208.avi Initial Thoughts for Digital Sign System Operation New files are placed In the incoming_content directory. Image files are converted to a video of x length, upscaled to the proper resoultion, then moved to the converted_files directory. Once all image files are processed, each video file is checked to see if it is the proper resolution. If a video has the proper resolution, it is moved to the current_content directory. Videos that are not at the proper resolution are converted/upscaled. The new file is moved to the current_content directory and the original is moved to the converted_files directory. Initial Thoughts for Digital Sign User Interface Setup The system should run a light window manager such as xfce or fluxbox with a black background. There should be no icons or toolbars visible on the external monitor. The external video port should be configured to run at 1280x720 (720p) to run the display properly. The system should be setup to always start gmplayer on the external monitor in full screen mode with the navigation panel disabled. It should also be configured to be the topmost window if possible. If the playlist and such are to be configured on the machine, an administration panel should be designed for easy control. This should be running on the internal monitor. If the administration is to be done remotely, a web based administration panel should be designed for easy control. The administration panel should make it easy to create and edit the playlist, move content between the directories, and force processing of the incoming_content directory. Mplayer fifo slave mode [[http://forum.doom9.org/showthread.php?t=114580]] [[http://www.linuxforums.org/forum/linux-applications/13072-mplayer-playlist-script.html]] [[http://mediacoder.sourceforge.net/wiki/index.php/MPlayer_Slave_Mode_Protocol]] [[http://fvwm.lair.be/viewtopic.php?f=38&t=1755]] [[http://www.perlmonks.org/?node_id=151232]] [[http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#StringSelections]] [[http://perldoc.perl.org/perlre.html]] +20+filename.jpg encode->filename.mpg encode->filename-720.mpg erase->filename.mpg move to processed->+20+filename.jpg filename.mpg (already 720) copy to -> filename-720.mpg move to processed -> filename.mpg (not 720) encode-> filename-720.mpg move to processed->filename.mpg
Linux Laptop
Required software
Display
Image is uploaded to server.
The image has a tag in the name defining the length the video should use when converted.
The image name format is *+numberofseconds+blahblah.png* where *+numberofseconds+* is the tag defining how long in seconds the video created from the image should be.
If no tag is present, it will be processed using the default duration specified in the configuration section of the script.
A configuration option in the script will define the default duration of videos created from images for processing images that don't have a duration tag.
A configuration option in the script will define whether or not to keep the original file after processing.
A configuration option in the script will define the video resolution to use (generally the resolution your display will run at).
A configuration option in the script will define whether or not to resize small images up to the display resolution. (framing options override this if framing is enabled)
A configuration option in the script will define whether or not to resize large images down to the display resolution. (framing options override this if framing is enabled)
Video is uploaded to server.
A configuration option in the script will define the video resolution to use (generally the resolution your display will run at).
Base Sign Directory
Directory for backgrounds and frames
Directory for video content
Directory for hotkey symlinks
Directory for incoming files to process
Directory for playlists
Directory for files that have been processed
Directory for videos made from images
Sign user home directory
Fluxbox configuration directory
X11 Configuration Directory