LMS - Lightweight Media Server


LMS is a free media streaming software, released under the GPLv3 license.
It allows you to access your music and your videos using an https web interface.

Features:
- User management
- Fast "Winamp-style" interface
- Audio/Video transcode (including downsampling), based on the libav project (see https://www.libav.org/).
- Custom API to access data using Protocol Buffers format over TCP/SSL (see https://github.com/google/protobuf/ and src/remote/proto)

Please note LMS is still under development and will gain more features in the future.
An android application is being developped as well.

LMS is written entirely in C++. Therefore, it is suitable to run on embedded devices, where space and/or memory are limited.
Please note some media files may require significant CPU usage to be trasncoded.

I) DEPENCIES

Debian packages:
libboost-dev libavcodec-dev libwtdbosqlite-dev libwthttp-dev libwtdbo-dev libwt-dev libprotobuf-dev libconfig++-dev libprotobuf-dev protobuf-compiler libjpeg8-dev libavcodec-dev libavformat-dev libavutil-dev

Warning: your distrib may provide an outdated wt library. Using the latest Wt (>= 3.3.3) is highly recommended (see http://www.webtoolkit.eu/wt)


II) BUILD

# autoreconf -vfi
# mkdir build
# cd build
# ../configure

(configure will complain if a mandatory library is missing)

# make

III) Setting up SSL materials (required by the SSL server and the web server)

This is just an example, you could do whatever you want (ca, self signed cert, etc.)

Generate a dh file:
# openssl dhparam -out dh2048.pem 2048

Generate a self signed certificate:
# openssl req -x509 -out cert.pem -keyout privkey.pem -newkey rsa:4096


IV) RUNNING

In the build directory:
# ./src/lms lms.conf

Create the lms.conf file using the etc/lms.sample.conf
- "ui.resources.approot" has to refer to the ui/approot/ directory.
- "ui.resources.docroot" has to refer to Wt's docroot (usually located in /usr/share/Wt)

Depending on your SSL parameters, you may be asked for the PEM passphrase to unlock the private key.

