foo_upnp 0.99.17 Features ======== * Media Server: - expose the foobar2000 Media Library, playlists and "what is currently playing" (still experimental) - stream almost any audio format playable by foobar2000. That includes formats generally not supported by most standalone Media Servers such as formats with CUE files, game music formats, audio files in archives, cd-audio... - stream album art - powerful per device streaming options, to adapt audio format to the capabilities of the remote playing device. Conversion to WAV or LPCM, transcoding to mp3, resampling, replaygain, bitdepth conversion, conversion to stereo... - customizable browse tree - accessible from the Internet (only from foobar2000 or an iPhone/iTouch with PlugPlayer). - works well when accessed from WMP12 (possibly also with WMP11, untested). * Media Server Browser (UPnP Browser): - browse remote Media Servers for local playback or remote playback to an UPnP Renderer on the network - browse and play music via the Internet from another foo_upnp Media Server, with optional transcoding to mp3 to save bandwidth - retrieve album art * Control Point (UPnP Controller) - control playback of UPnP Av Media Renderers (similar to Windows7 "Play to" feature) - integration with the Media Server to serve locally managed audio - specific support Linn Ds product: handle Playlist sources for on-device playlist management and other analog sources (volume control only) * Renderer let foobar2000 playback be controllable by Control Points Some use cases: - Use the server to stream audio to a PS3, XBOX360 (using their interface), iPhone (PlugPlayer) - Push audio from either your local foobar2000 Media Library or another UPnP Media Server to WMP12, an iPhone (PlugPlayer) or another foobar2000 instance on the network. - Control foobar2000 playback from an iPhone, WMP12, or any other Control Point. - Control a Linn Ds product including making playlists, switching sources, etc. Requirements ============ - foobar2000 1.0.0. The plugin do not load with older version (0.9.x) Installation ============ Just copy foo_upnp.dll in the components subdirectory of your foobar2000 installation and restart foobar2000. If loaded, the plugin will appear in File->Preference->Components, with the version number. User Interface ============== foobar2000 supports mainly 2 user interfaces. Defaults UI is the standard interface. Columns UI (CUI) available separately is another interface, supporting album art in playlists (like KinskyDesktop). Choosing an interface is a matter of personal preference. The plugin has two dedicated components, displayed either in their own window or in an embedded panel that you can place anywhere in the layout. The components are called UPnP Browser and UPnP Controller. Their standalone window versions can be displayed via foobar2000's View menu (View->UPnP Browser, View->UPnP Controller) Both these components can be created only once. The embedded version of these components must be added through layout editing: Layout editing in DUI is described here: http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Layout_Editing_Mode Here's a quick start: "Enter layout editing mode (View->Layout->Enable layout editig mode). In this mode when you right click on a component in the UI, you'll be able to add new ones. For a quick test just select one component, right-click then select Replace UI Element and in the component list choose UPnP Browser (it is in the Utility section). Then you should have a window with your UPnP server listed and browsable. If you don't want to replace an existing component you'll need to add a vertical or horizontal splitter first" A DUI layout is provided here: http://bubbleguuum.free.fr/foo_upnp/foo_upnp_dui.fth. It is loaded using File->Preference->Display->Default User Interface->Import Theme. This is a simple layout that regroup most of the plugin functionality in the UPnP tab. The upper-right component is the UPnP Browser, The lower-right is the UPnP Controller and the playlist is the Controller Playlist (more below). Layout editing in CUI is somewhat similar and access in View->Layout->Live editing The UPnP Browser ================ This component allow browsing of all detected UPnP Media Server on the network in a tree like presentation. UPnP Audio items can be sent to a playlist, usually for playback, but also for some processing (copying files to local PC, using the converter to change the audio format,...). At the moment, Search is supported only on remote foobar2000 media servers running this plugin Once a tree node is browsed and if it contains audio items, the number of audio items is displayed next to the node name. A node containing audio items can be dragged to any playlist, to insert items into that playlist. The Browser behaviour is configurable in File->Preferences->Tools->UPnP->Browser (or via context-menu): Left-Click Action, Right-Click Action: configure mouse action when a node is clicked. Note that a content of a node (ie tracks) is always retrieved before running the specified action Search Result Action: specify where to send search results (audio tracks) Fetch remote album art: enable retrieval of album art for display in the DUI Album Art Viewer component (or equivalent component in CUI) Show all loaded content under a node: if enabled, a node content is he reunion of its browsed sub-nodes. Apply the "sort incoming files by" filter when sending new items to playlist: If disabled, browsed item are sent in the order they are returned by the server. Otherwise, the are sent in the order computed by the "Shell Integration->Sort incoming files by" titleformat expression. The later can be useful if the server's order must be changed. The UPnP Controller ==================== This component acts as a Control Point and allow to control playback and volume of selected UPnP Av Renderer or Linn Ds Renderer. It presents as a mini-player with standard playback controls. It is totally separated from foobar2000's own playback buttons. Renderer detected on the network appear in the upper combo box. Linn Ds renderers are named: ": ()". Select the renderer you want to control in the combo box. If the selected renderer is not capable of playing audio, all buttons will be grayed except volume control (that's the case for Linn Ds Analog sources). The controller uses a special foobar2000 playlist named "UPnP Controller Playback queue" (let's call it the Controller Playlist from now on). It can be displayed at any time using the PL button. This playlist is special because its behaviour is slightly different than a regular foobar2000 playlist. The Controller Playlist is the equivalent of the KinskyDesktop playlist and represents what's to be played by the UPnPAV Renderer Playlist behaviour is different based on the renderer type: - an UPnP AV Renderer: the Controller will instruct the Renderer to play tracks in order. Current track is the selected one. - a Linn Ds Renderer (Playlist source): the playlist mirrors the remote on-device playlist. Modifying the playlist modify the remote playlist. A current limitation is that outside modifications (for example from KinskyDesktop) are not reflected. In both cases double clicking an item play it immediately on the remote Renderer. the DELETE key remove items. Next we'll need to add items to the Controller Playlist. There are several way to add items: * Adding items using the UPnP Browser If your music is stored on an UPnP Server (Twonky, Asset, etc), you must use the UPnP Browser, but first we'll need to configure it so it works well with the Controller Playlist. By default, clicking a Browser node load the content of that node (tracks that is) and send the content to the current playlist. This is not what we want else we would always overwrite the Controller Playlist. Hopefully right/left click mouse actions on a tree node are configurable. Go into File -> Preferences -> Tools -> UPnP -> Browser to configure the browser. Change Left click action to "Do Nothing" (when a node clicked that will just load its content), and for example assign right-click action to "Add to current playlist". When right-cliking a node it will load its content and send it to the Controller Playlist (provided it is the active playlist). A current limitation is that the UPnP Browser does not display the individual tracks in the tree, so you can only add / insert a whole node content (usually an album) to the playlist. It is also possible to drag a tree node to the Controller Playlist, to insert its content in the playlist. This operation works only if the node is loaded and has any content. A node content is loaded by left-clicking on it. Note that assignable mouse action such as "Add to current playlist", etc will always load the node before doing the action. * Adding items using the Album List If your music is handled by foobar2000 you can use the Album List component to select music and drag'n'drop to the Controller Playlist. In that case that will be the plugin's UPnP Server that will automatically stream to your Renderer. * Adding items using another playlist - any other method that can be used between 2 regular playlist can be used to add items: - dragging selected items from a playlist to the "UPnP Playback Queue Playlist" in the Playlist Manager compnent - copy/paste items etc. * Adding items using the context menu Select some items and in the context menu look for the "UPnP Controller" submenu. In this menu you'll have entry to either play or enqueue items for each renderer. This is similar to WMP12 "Play To" menu. * Adding items from explorer You can drag audio items from explorer or any other program to the Conroller Playlist * The Controller status bar The Controller displays various informations in its status bar like playing state, playing track info, errors, etc... Playing track information formatting can be customized in File->Preferences->Tools->UPnP->Controller, using a titleformat script. Default is - . For items from a Linn Ds Playlist source, technical info is available for display (%codec%, %samplerate%, %bitspersample%, %encoding%, %bitrate%). * Known Linn Limitations: - Linn Playlist modifications done externally (for example using KinskyDesktop) are not reflected yet - Linn Pre-amp only products are not listed - no standby, random, repeat - reordering the Linn Playlist clicking on a column header will totally break the playlist - reordering items in the Linn Playlist by draging items only move the first n consecutive selected items - reordering items in the Linn Playlist from top to bottom generates too much insertions/deletions The Media Server ================= To be documented... Streaming Profiles ----------------- Internet Access --------------- Suppose you want to access your collection from work. You have to configure the server part of this plugin on your home PC and you'll be using the client (browser) part at work to connect to it. Configuring remote Internet access is done in the Server/Advanced settings preference page: - public server IP: this is your static visible internet IP address. If you're using a router and the server runs under a PC using NAT, you'll have to configure your router to redirect incoming traffic on the configured server port to the private IP of your PC running the server. Example: your public IP is 1.2.3.4 and your PC IP running the server on the LAN is 192.168.1.100, and the server runs on port 5678. You have to configure your router to redirect incoming traffic on port 5678 to the PC 192.168.1.100 of your LAN. If there's a firewall as well it must be configured to allow incoming connection on this port. - login/password: a login and password to protect remote access. This is not super secure but should be sufficient for the purpose. Do not use an important password. To test that the server is accessible from outside, connect to it with your browser using http://<public ip>:<server port> and you should see a blank page. Note that it is possible to use port 80 as the server's port. This can be useful if other non-standard ports are not allowed by your admin. To connect to a remote server, use the contextual menu in the UPnP Browser panel and select "Add remote foobar2000 server". If all goes well after you set the ip/login/port/password, the remote server should appear in the browser. A remote server can be removed by the context-menu on its node. For security reasons remote items are never persistent and are not valid anymore after a server restart. Along with Internet access, it is possible to transcode audio to mp3 to adapt to often limited upload bandwidth. Look into Server/Streamed Audio for configuration. Customizing the browse tree ---------------------------- (to be completed) Edit foo_upnp_ml_tree.xml in either your foobar install directory or in <Document and settins>/<login>/Application Data/foobar2000 writing: <spec type="object.container.genre.musicGenre">%genre%</spec> just splits your collection by genre, each node containing the items of a genre. adding more <spec> clauses further split generated nodes into sub-nodes, for example to split all tracks of a genre by albums (this is what the default Genres node does) you would add: <spec type="object.container.genre.musicAlbum">%album%</spec> You can also restrict the splitting of a node to a subset of the Media Library. Suppose you want to display by genre, only your tracks in compilations: <SubTree label="Compilations tracks by genres" query="compilation PRESENT"> <spec type="object.container.genre.musicGenre">%genre%</spec> </SubTree> KNOWN ISSUES ------------ - copying the UI element doesn't always work as expected as it is single instance - seeking in FLAC files streamed as FLAC can give "Unsupported file format" errors - some audio formats do not support HTTP seeking (ogg) INCOMPLETE FAQ ============== How to enable logging ? ----------------------- Logging can be enabled in File->Preferences->Tools->UPnP->Server->Advanced Settings. If log to file is enabled, a log file called foo_upnp.log is generated in either your foobar install directory or in <Document and settins>/<login>/Application Data/foobar2000. This file is overwritten on each foobar launch. You can also see all those traces in foobar's console by enabling the relevant option. I have problems with streaming on my PS3 ---------------------------------------- - Use a wired connection wheneven possible. If using wireless, change your wifi channel id. - Set the output frequency to 48Khz: http://manuals.playstation.net/document/en/ps3/current/settings/outputfrequency.html I have problems seeing servers on the LAN ----------------------------------------- Check that your firewall do not block UDP multicast Can the Media Server expose my files by directory structure ? ------------------------------------------------------------ No, it is not implemented yet Can I sync multiple Renderers ? -------------------------------