Scratchpad:Media Plugin Rewrite
From OpenLP
Put here some ideas for rewriting/ extend the media plugin.
Contents |
Functionalities
- Play Video Files
- Play Audio Files
- Video Backgrounds
- in a theme
- dynamically
- Audio Linking
- dynamically
- in a song
Control elements
Controls at Media Manager
In case of setting a Media as Background, the available controls will apear in the related Controller The Media will not start automatically.
- Set Media as Preview Background
- Set Media as Live Background
Controls at Controllers (Preview/Live)
The main toolbar will alway stay at the controllers. At loading of media files additionally control elements should be displayed:
Standard Controls
- Play/Pause (could be one button)
- Stop
- Seek Slider
- Volume Slider
- Start Time ?
- Stop Time ?
- Loop ListBox (No, This Item, All Items) -> "All Items" only in case of loaded folder
If the Media is a background item this additionally item will be displayed in the main toolbar
- Remove from Background
Special Controls (depends on the type of Media)
- DVD
- Navigation Buttons (Left, Right, Up, Down)
- Chapter ListBox
- Language ListBox
- Folder
- Random Checkbox
Controls at Service Manager
- Same controls as for Controllers, but maybe as Pop up Menu
Controls at Theme Manger
- File Chooser
- Start/Stop Positions
Display elements
- Video Widgets for different Backends
Work Flow
At startup the core should provide Services to add Items to the following Elements
- Media Manager (currently done)
- Controllers
- Displays (Preview Display of the controllers and Live Display)
- Service Manager
- Theme Manager
The plugins should have Items for the following services
- Menu Items for Media Manager
- Control Toolbars for Controllers
- Display Widgets for Displays
- Menu Items for Service Manager
- Menu Items for Theme Manager
After loading a media in the Media Manager, nothing happening so far After send media to preview or live controller, the related plugin can show appropriate Control items Now the user can do some settings stuff for the media item(s) May the related controller preview list widget could show the media title(s) instead of the clapperboard picture After this the media could be started or moved to live (or maybe to Service Manager or as background for current Theme)
Open Issues
1. For providing Meta Infos of media files it is mostly needed to load a media file and start playing shortly. So there should be an own (hidden) display widget for all backend apis for the Service Manager. (This datas are needed for duration of media file.) May it is a good idea in general, because of when editing the media item in the Service Manager it would possible helpful to have a litte preview. 2. Where the media files should be saved (in case of putting it in a service or Theme)
Notices
1. Future enhancements such as linking songs to audio (backing tracks) and adding a video background to a theme, should be able to hook into the media displays without too much effort. Backing tracks would obviously need a way of pulling in the media controls cleanly. Some of this may determine how much code is in core and how much is in the media plugin.
2. If the media plugin is disabled, OpenLP should still function perfectly well, so what should happen about the items in #1
3. Plugins should not be accessing core classes/methods directly. I.e. we don't want a method in a plugin to just call something like mainwindow.livecontroller.doSomething(). We need a documented proper api. Signals are usually the preferred method for sending data/performing actions, but we also need to consider the occasions when a plugin needs to retrieve data from core.
4. Whether plugins should be adding items to the controller toolbar, or whether these should be provided by core, and the best way of doing whichever option we choose.
5. May in general we could use QGraphicsView and QGraphicsScene with proxyWidgets. So we could easy add more widgets to the display and control the position via z-index. 5.1 With this it would maybe possible to use phonon directly for background videos, because of a phonon widget can give the control to a proxy widget. (unfortunately this doesnt work for vlc) 5.2 with the scale option of a QGraphicsView we could remove the usage of screenshots for the preview screen in the preview controller