Hardware Reference
In-Depth Information
High-Level Separation of UPnP
Given the stack-based arrangement of the internal protocols, it is no surprise that the end user is introduced to this
concept, too, as there is a separation of functionality for the various parts of the system. This split is very natural and is
comprised of:
u
server—to provide media to other devices on the network
u
controller—to start/stop the media, on any given device
u
renderer—to display the media, be it video, pictures, or audio streams
This separation means that you can have any (or all) of the layers of functionality implemented on any given
device. If they live on a single device, you have a standard media player. When the server is separated, you have the
typical media streaming setup with the NAS playing the role of a server, while the streamer is a combined controller
and renderer. When they're all separate, you can control any device from anywhere, using any media. This extends
further, so that you can start watching a program on one device (or renderer), use the controller, and send a command
to a different renderer to continue watching.
It also means you need to install three pieces of software.
Server
There are several options here and the choice is best determined by the size of the machine that will be running it.
Minidlna
For miniature needs, such as the Raspberry Pi, we have the aptly named minidlna. This is miniature in size and
presence, but it provides the standard functionality of audio, video, subtitles, and pictures out of the box. The biggest
drawback is its lack of transcoding but, for a Linux-based HA solution, where the media renderers are able to cope
with almost any format, this is an unnecessary drain on CPU cycles.
It can be downloaded from http://sourceforge.net/projects/minidlna/ or, for those using ArchLinux,
retrieved as a package at https://www.archlinux.org/packages/?name=minidlna . Most of the other distros have
yet to include it, so you will generally need to compile it. You will always need to include the development versions
of the AV libraries on which it depends:
u
libavcodec
u
libavformat
u
libavutil
u
libexif
Additionally, depending on the versions, you might need to amend metadata.c to handle a change in the AV
header files. Specifically, head to around line 715 and explicitly add:
#define AV_DICT_IGNORE_SUFFIX 2
so that it precedes the function definition:
#define AV_DICT_IGNORE_SUFFIX 2
sqlite_int64
GetVideoMetadata(const char * path, char * name)
{
Search WWH ::




Custom Search