User Tools

Site Tools


work_projects:linuxdigitalsign

Linux Digital Sign System

*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 Project

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.

The Hardware

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.

The Software

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).

Current Progress/Plans

makehd.pl (file processing script)

(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.

mpslave.pl (script to start mplayer in slave mode and keep it looping the playlist)

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.

phpmplayer.php (PHP frontend to mplayer slave)

(In Progress)
This script will control control mplayer running in slave mode via a fifo file.

Progress

I believe I have this fully working now, but need to test more and see if we want any more features.

Current Design Overview

*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


In-process-rewrite (i.e. major updates, cleanup, etc.)

Linux Laptop

Required software

Display

How I want image processing to work (some of this is implemented)

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)

A configuration option in the script will define whether or not to embed the image in a frame.

  • A configuration option in the script will define whether or not to resize and embed images that are already at the defined display resolution.
  • A configuration option in the script will define the image embed frame to use.
  • A configuration option in the script will define the embed area resolution in the frame.
  • A configuration option in the script will define whether or not to resize small images up to the embed area resolution.
  • A configuration option in the script will define whether or not to resize large images down to the embed area resolution.

How I want video processing to work (some of this is implemented)

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).

A configuration option in the script will define whether or not to process videos at all

  • 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 whether or not to resize small videos 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 videos down to the display resolution. (framing options override this if framing is enabled)

A configuration option in the script will define whether or not to embed the video in a frame.

  • A configuration option in the script will define whether or not to resize and embed videos that are already at the defined display resolution.
  • A configuration option in the script will define the video embed frame to use.
  • A configuration option in the script will define the embed area resolution in the frame.
  • A configuration option in the script will define whether or not to resize small videos up to the embed area resolution.
  • A configuration option in the script will define whether or not to resize large videos down to the embed area resolution.

Directory Structure

/Sign

Base Sign Directory

/Sign/bg

Directory for backgrounds and frames

/Sign/content

Directory for video content

/Sign/hotkeys

Directory for hotkey symlinks

/Sign/incoming

Directory for incoming files to process

/Sign/playlists

Directory for playlists

/Sign/processed

Directory for files that have been processed

/Sign/static-content

Directory for videos made from images

/home/digitalsign

Sign user home directory

/home/digitalsign/.fluxbox

Fluxbox configuration directory

/etc/X11

X11 Configuration Directory

work_projects/linuxdigitalsign.txt · Last modified: 2017/07/02 10:11 (external edit)