Hi, I need a software able to display video, images and web pages on a large monitor. The software consists of two parts: a desktop application that will display information on the screen and a desktop application that will be used to control multiple screens remotely. Please see the detailed requirements below.
* Screen desktop application * The application should be developed in WPF/C# and WCF. Developing in Java may be considered. The application should be able to display the following: - Online video available at a URL. The video will use some of the streaming protocols like MMS and RTSP. * The video player used can be WMP or another appropriate player (subject to approval by the employer) - Offline video files - Web pages (offline and online) - Image files The application should be able to download files (video, images, zipped web pages) and store them locally. It should keep the list of downloaded files and accompanying metadata. XML files could be used for that purpose. It should be possible to control the application remotely. The application should expose a WCF service to accept remote commands. Security is not required. Roughly, the WCF service should provide the following methods: - Methods to instruct the application to download files from a specific location via HTTP. The application may have to download metadata files (XML) as well. - Methods to instruct the application to display online video, offline video, a web page (offline/online), image - Methods to inspect the current state of the screen - what does it display at the moment - Methods to inspect the list of video/image/etc. files downloaded by the application - Methods to inspect the downloads in progress - Other requirements will be provided later. Additional requirements: - When the application does not display anything it should just display back screen - The application should be full-screen * Controlling desktop application * The application should be developed in WPF/C#. Developing in Java may be considered. The application should use MVVM or other appropriate pattern. It may use a docking framework like AvalonDock ([url removed, login to view]). The application should be able to control multiple screens at the same time. The names, IP addresses and ports of the screens should be read from a file. When started the application should load the list of screens from the file and display them. It should be possible for the user to do the following: # Uploads There are two methods to make a file available at a screen: to upload it directly via the controlling application or to instruct the controlling application to download the file from a server via the HTTP protocol. When file is uploaded directly the user should be able to enter additional data such as name (different from the file name) that will be recorded in the file's metadata. When the file is hosted on a server its metadata should be contained in a separate XML file with a known name (e.g. video file [url removed, login to view] and metadata file [url removed, login to view]). Hosted files may have localized version (e.g. [url removed, login to view]). The list of localized version may be contained in a special index file (e.g. [url removed, login to view]) so that the screen knows what localized versions are available. For direct uploads from the desktop application to the screen the user should be able to see all current uploads and abort any of them. Similarly the user should be able to see the pending/active downloads a screen is doing and abort a download. The types of files are: video, image and archived HTML page and resources (CSS, JS, images) in .zip format or other appropriate archive format. # Control The user should be able to send instructions to multiple screens at the same time. To facilitate the control of large number of screens the user should be able to pick up a set of screens and organize them in a group. Each group has a name and groups should be persisted in a XML file (the name of the group and the list of screens it contains). Groups should be loaded during application start-up. The user should be able to open a group of screens ans somehow see the media files available on them. The user should be able to instruct one or more screens (at the same time) to play/display a file. For example, if the same file is available on multiple screens the user should be able in a single action (e.g. drag-and-drop) to instruct the screens to player/display the file. The user should be able to create something like a playlist for the screens in the group. They should be able to change the players list of one, several or all screens of the group in a single action (e.g. drag-and-drop a file to multiple playlists). Each entry in the list has an exact time-of-the-day when it should be played/displayed and a duration. For images and web pages the duration may be specified in the metadata of the file or the user may be prompted to enter it. When the playlist of a screen is changed the changes (or the complete playlist) should be sent to the screen. The screen should keep the playlist in memory and on disk and execute it. If the screen is restarted it should resume following the playlist loaded from disk. All times in the playlist should be in UTC. Since the playlist of a screen is kept on the screen when the user opens a group of screens the controlling application should download the current playlist from all screens and display them. The playlists should be displayed so that the user can clearly see when a particular file will be displayed on the screen, for how long and when it ends. * Screen desktop application - file transition * The transition from displaying one file to the next one should be smooth. For example, if the screen displays an image and the next thing to display is offline video the application should prepare the video so that it can be started immediately after it hides the image and shows the video player. The same goes for online video and offline/online web pages. Note: Offline web pages must be unzipped before they can be displayed. * Final notes * More information and requirements will be provided to selected bidders. I need a rough estimation of cost and time required for development. The winning bidder may be required to sign NDA before starting the project.