dLeyna is an umbrella project hosting a number of middleware components designed to make it easy for developers to integrate DLNA functionality into their applications. Currently, six components make up the dLeyna project. These are
dLeyna-server provides APIs for discovering Digital Media Servers and for browsing and searching their contents. dLeyna-server can be used in conjunction with a multimedia framework, such as GStreamer, to implement a Digital Media Player. It can also be used to implement the DLNA Download System Use Case. dLeyna-renderer provides APIs for discovering and manipulating Digital Media Renderers. dLeyna-renderer can be used to implement two-box push. Together, these components can be used to create a Digital Media Controller.
The two dLeyna components mentioned above share a lot of common code. For example, they use the same logging and task management systems and the same IPC abstraction mechanism (more on this later on). To improve code re-use, all of this common code is located in a separate library, dLeyna-core.
As previously mentioned, dLeyna-server and dLeyna-renderer provide high level APIs for creating DLNA applications. These two components are implemented as services rather than libraries and hence they make their APIs available via IPC mechanisms rather than directly through function calls. The dLeyna services are designed to support different IPC mechanisms. Internally they use an abstract API to perform IPC tasks, such as publishing an object or sending a notification, and these tasks are delegated through this API to a dynamically loaded shared library called a connector. Currently, the dLeyna project contains only a single connector module, dLeyna-connector-dbus. As its name suggests, dLeyna-connector-dbus can be used to provide a d-Bus API for the dLeyna services.
Descriptions of dLeyna's d-Bus APIs can be found at the links below:
HTML 5 APIs
One of the main goals of the dLeyna project is to provide APIs that can be used by both native and HTML 5 applications. To this end we also supply HTML 5 APIs for discovering and manipulating DMRs and DMSs. These APIs are implemented on top of a piece of middleware called cloudeebus. Cloudeebus can be used to automatically create JS proxies for d-Bus objects. It uses d-Bus introspection to populate these proxies with JS versions of the methods, properties and signals, that are exposed by the underlying d-Bus objects. Cloudeebus consists of a JS layer and a python server. The python server exposes a web socket interface that allows the JS layer to inspect and manipulate d-Bus objects by sending data down a websocket. Internally, cloudeebus uses a component called autobahn to help manage the RPC over the websockets.
Although possible, we do not recommend that JS applications use cloudeebus directly to access DMSs and DMRs. Instead they should use a component called cloud-dLeyna. Cloud-dLeyna is a thin wrapper library around cloudeebus. It simplifies the task of creating DLNA enabled applications in JS and it isolates JS clients from the underlying cloudeebus and dLeyna APIs.
Information about dLeyna's HTML 5 APIs can be found on the cloud-dLeyna wiki.
Going forward, we plan to create a new connector component that would allow the dLeyna services to expose a web socket interface. cloud-dLeyna would then be able to talk directly to the dLeyna services without going through cloudeebus. This would remove one layer of IPC and a number of dependencies.
The best way to learn about dLeyna is to read the documentation. There is one high level document that provides a brief introduction to DLNA and explains the goals and the motivation of the dLeyna project. There are also two technical documents, dLeyna-server and dLeyna-renderer, that describe the in detail the d-Bus APIs of the dLeyna middleware components.
How to contact us
Please visit our community page and use our mailing list, bug tracker, and source repositories to contact us and contribute to the project.