Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pschatzmann/arduino-dlna
Work in progress
https://github.com/pschatzmann/arduino-dlna
Last synced: 2 months ago
JSON representation
Work in progress
- Host: GitHub
- URL: https://github.com/pschatzmann/arduino-dlna
- Owner: pschatzmann
- Created: 2024-05-10T18:39:57.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-05-31T15:01:49.000Z (7 months ago)
- Last Synced: 2024-10-11T13:36:34.573Z (3 months ago)
- Language: C
- Homepage:
- Size: 33.1 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Digital Living Network Alliance (DLNA)
## Brief
This library provides the functionality to implement a UPnP/DLNA [device](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1DLNADeviceMgr.html) and [control point](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1DLNAControlPointMgr.html) in Arduino.
The Digital Living Network Alliance (DLNA) aims to establish the interoperability among PCs, consumer appliances, and mobile devices in wireless networks and wired networks. The purpose is to provide a solution for sharing between digital media and content services.
Reference Documentation is hard to find. Therfore I am providing some valuable links:
- [UPnP and UDA Tutorial](https://upnp.org/resources/documents/UPnP_UDA_tutorial_July2014.pdf)
- [UPnP Device Architecture Tutorial](
https://embeddedinn.wordpress.com/tutorials/upnp-device-architecture/)
- [UPnP Device Architecture](http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf)I was struggling quite a bit to choose the right approach to implement something like this in Arduino.
On the desktop the the functionality can be provided with the help of the following projects:- [pupnp](https://github.com/pupnp/pupnp) A Portable SDK for UPnP* Devices
- [gmrender-resurrect](https://github.com/hzeller/gmrender-resurrect): A headless UPnP/DLNA media renderer based on pupnp## Implementation Approach
A DLNA device uses UDP, Http, XML and Soap to discover and manage the services, so there is quite some complexity involved.
I decided to implement the functionality from scratch using the basic Arduino Network API and I do not rely on any external libraries.
The [DLNAControlPointMgr](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1DLNAControlPointMgr.html) is setting up a control point and lets you execute actions.
The [DLNADeviceMgr](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1DLNADeviceMgr.html) class provides the setup of a Basic DLNA Device service. Devices are represented by the [DLNADevice](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1DLNADevice.html) class. The device registers itself to the network and answers to the UDP DLNA queries and requests:- We handle the UDP communication via a [Scheduler](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1Scheduler.html) and a [Request Parser](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1DLNARequestParser.html)
- We handle the Http requests with the help of my [TinyHttp Server](https://pschatzmann.github.io/arduino-dlna/docs/html/classtiny__dlna_1_1HttpServer.html)
- The XML service descriptions can be stored as char arrays in progmem or
generated dynamically with the help of the [XMLPrinter](https://pschatzmann.github.io/arduino-dlna/docs/html/structtiny__dlna_1_1XMLPrinter.html) class.Developping and debugging on a microcontroller is quite tedious: therefore this project can also be compiled and run on a __linux desktop__.
## Project Documentation
- [Wiki](https://github.com/pschatzmann/arduino-dlna/wiki)
- [Class Documentation](https://pschatzmann.github.io/arduino-dlna/docs/html/annotated.html)