Open-source project
UniversalMediaServer/UniversalMediaServer avatar
UniversalMediaServer/UniversalMediaServer

Universal Media Server: a DLNA and UPnP server that transcodes what your TV cannot play

A DLNA, UPnP and HTTP(S) Media Server.

2,653 stars530 forksJavaGPL-2.0

At a glance

What is it?
Universal Media Server is a Java media server that speaks DLNA, UPnP and HTTP(S), and calls FFmpeg, MEncoder, tsMuxeR and VLC to transcode formats your player does not understand. It is aimed at people with an existing library and an awkward client, not at people who want a hosted streaming service.
Who is it for?
Adopt Universal Media Server if you already have media files on disk and a client that refuses half of them (an older TV, a PS4, a Blu-ray player), because the transcoding engine is the reason the project exists. Do not adopt it if you want a hosted catalogue with remote access and mobile apps, since it is a LAN server that serves files it can reach and does not manage a subscription library.
Can I use it commercially?
Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 6 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Who Universal Media Server is for, and the problem it actually solves

The problem is not storage and it is not discovery. It is format mismatch. You have a folder of video files, your television or console sees the server on the network, and then it refuses to play half the files because the container, the codec or the subtitle format is not one it handles. Universal Media Server exists to sit between the file and the client and fix that gap.

The README describes it as "a DLNA, UPnP and HTTP/S Media Server" that is "capable of sharing video, audio and images between most modern devices", and notes it was originally based on PS3 Media Server by shagrath, "in order to ensure greater stability and file-compatibility". That lineage explains the design centre: the PlayStation 3 was a famously picky DLNA client, and a server built to satisfy it had to transcode rather than merely serve.

The audience follows from that. This is for someone with files already on a disk, a client that is fussy about what it accepts, and no interest in uploading a library to somebody else's service. It runs on Windows, Linux and macOS, so the host can be a desktop, a home server or a small always-on machine. It is not for someone who wants a catalogue, recommendations, remote streaming over the internet, or a mobile app with a watchlist. Those are different products solving a different problem.

How the transcoding pipeline works, and why FFmpeg is load-bearing

Universal Media Server is a Java application, and the repository layout shows a Maven build (pom.xml) with a separate react-client directory, so the web interface and the server core are built and shipped separately. The topics list on the repository names angular and react alongside dlna, upnp, ffmpeg and java, which is consistent with a Java backend and a JavaScript front end.

The mechanism described in the README is a chain of external tools. The server is "powered by FFmpeg, MediaInfo, Crowdin, MEncoder, tsMuxeR, AviSynth, VLC, and more, which combine to offer support for a wide range of media formats". Read that as an architecture: MediaInfo inspects a file to determine what is inside it, the server matches that against what the requesting device says it can play, and if there is no match, one of the transcoding backends (FFmpeg, MEncoder, tsMuxeR, VLC, AviSynth) produces a stream the device will accept. Crowdin is a translation platform, not a media tool, so it belongs to the localisation workflow rather than the streaming path.

The practical consequence is that the quality of your experience depends on two things that are not the Java code: the capability profile the server holds for your device, and the transcoding tool it picks. A device profile that claims the client supports more than it really does will produce a file that arrives and then fails to play. A profile that claims less will trigger transcoding on files that could have been served untouched, which costs CPU. The README does not describe how profiles are selected or how to correct one, so treat the renderer configuration as the part of this system you will actually spend time on.

Installing Universal Media Server and serving a first folder

The README does not contain installation instructions. It links to a downloads page at universalmediaserver.com/downloads and to an INSTALL.txt file in the repository root, and that is where the project says to get it. The repository also ships BUILD.md for building from source, INSTALL.txt for installation notes, and a runtestserver.sh script, which suggests a development server can be started from a checkout.

Because the README gives no command sequence, there is no command to copy here. The repository layout tells you what exists: BUILD.md describes the source build, INSTALL.txt describes installation, and runtestserver.sh is a script at the repository root whose contents are the only place its behaviour is defined. Read those three files before typing anything.

For normal use, the intended path is the packaged installer or archive from the downloads page, not a source build. The README does not document which artifact to run after a source build, so treat BUILD.md as the authority on that rather than guessing a jar name.

Once the server is running, the first real task is adding a folder to the shared library and confirming that a client on the same network can see it. The README states the program "streams or transcodes many different media formats with little or no configuration", which is the claim to test first: add one directory, open the client's media browser, and see whether the files appear and whether the awkward ones play. If a file appears but will not play, that is the transcoding path failing, not the discovery path.

Where Universal Media Server is the wrong tool

The most important limitation is that this is a LAN server. The README describes sharing between "most modern devices" on a network and lists DLNA, UPnP and HTTP/S as the protocols. Nothing in the README describes remote access, user accounts, or a hosted catalogue. If your requirement is watching your library from a hotel room, this is the wrong product, and no amount of configuration will turn a DLNA server into a remote streaming service.

The second limitation is the transcoding dependency. Because the media handling is delegated to FFmpeg, MEncoder, tsMuxeR, VLC and AviSynth, the server inherits their behaviour and their resource cost. A machine that can serve files happily may not be able to transcode several at once, and the README makes no performance claim that would let you size hardware in advance. The honest position is that you find the limit by using it.

The third is the device profile problem described earlier. The README says the program works "with little or no configuration", and for common clients that is probably true. For an unusual client, the work moves from configuration files to diagnosing why a stream that was produced does not play. That is a different kind of effort than adding a folder, and it is the failure mode most likely to frustrate a new user.

Finally, the licence is GPL-2.0. If you intend to embed this in something you distribute, that matters, and the README points to the LICENSE file rather than summarising the terms.

Universal Media Server versus Plex, Jellyfin, Emby, Serviio and MiniDLNA

The comparison that matters is between servers that manage a library and servers that expose a filesystem. Plex, Jellyfin and Emby are in the first group: they scan your media, build a metadata catalogue with artwork and descriptions, and present their own clients. Universal Media Server is in the second group. It exposes what you point it at, over protocols that existing devices already speak, and its distinguishing feature is the transcoding chain rather than the catalogue.

The practical difference shows up in what you install on the client. With a catalogue server you install that project's app on the television, phone or console. With Universal Media Server you use whatever DLNA or UPnP browser the device already has, which is why a PS4 or an older smart TV can use it without new software. If your client has no such browser, this approach gives you nothing.

Serviio and MiniDLNA sit closer to Universal Media Server in approach, since both serve over DLNA. The README does not compare them, so the honest statement is that the project maintains its own comparison page at universalmediaserver.com/comparison, and that page is the place to check the differences rather than this article. What can be said from the repository alone is that Universal Media Server is Java, GPL-2.0, and explicitly built around a multi-tool transcoding stack, which is a heavier design than a minimal DLNA responder.

Maintenance, releases and what upgrading costs you

The repository is not archived, and the last push was on 2026-09-24, four days before this was written. Recent releases are 15.8.0 on 2026-07-20, 15.8.1 on 2026-08-23 and 15.8.2 on 2026-09-09. That is a steady cadence of patch releases within a minor line, which tells you fixes are being shipped but says nothing about the size of the changes.

The upgrade cost is not in the server itself, it is in the configuration you have built around it. Device profiles, transcoding preferences and library paths are the things you will have customised, and the README does not document a configuration migration path or a rollback procedure. Before upgrading across a minor version, the safe move is to copy your configuration directory aside, because the project does not promise that settings survive. The repository carries a CHANGELOG.md and a RELEASE.md, and those are where the project records what changed between versions.

On licensing, Universal Media Server is released under GPL-2.0, and the README directs readers to the LICENSE file in the repository. That is a copyleft licence, and it has implications if you plan to redistribute a modified version or bundle the server into a product. This is not legal advice; if the redistribution question matters to you, the LICENSE.txt file and the project's own statements are the sources to read, not a summary.

Editorial conclusion

Adopt Universal Media Server if you already have media files on disk and a client that refuses half of them (an older TV, a PS4, a Blu-ray player), because the transcoding engine is the reason the project exists. Do not adopt it if you want a hosted catalogue with remote access and mobile apps, since it is a LAN server that serves files it can reach and does not manage a subscription library. Before committing, check the download page for your platform, confirm your client appears in the supported renderer list, and read the comparison page the README links to if you are choosing between this and another server.

Frequently asked questions

What is Universal Media Server?

It is a DLNA, UPnP and HTTP(S) media server written in Java that shares video, audio and images between devices on a network, and transcodes formats a client cannot play using tools such as FFmpeg, MEncoder, tsMuxeR and VLC.

How do I install Universal Media Server?

The README does not give installation steps; it links to the downloads page at universalmediaserver.com/downloads and the repository contains INSTALL.txt and BUILD.md. The README does not document the build command, so those files are where the procedure lives.

How do I use Universal Media Server with a PS4?

The README does not document PS4-specific steps. It states the server was originally based on PS3 Media Server to improve file compatibility and that it shares media with most modern devices, so the approach is to run the server and use the console's own DLNA or UPnP browser.

Is Universal Media Server good?

That depends on whether you need transcoding for a fussy client. The README states it streams or transcodes many formats with little or no configuration, but it makes no performance claims, and the device profile is the part most likely to need attention with an unusual client.

How do I install Universal Media Server on Ubuntu or Linux?

The README does not give Linux-specific installation steps. It links to the downloads page at universalmediaserver.com/downloads, and the repository contains INSTALL.txt and BUILD.md for the source-build route.

How do I use Universal Media Server?

Run the server, point it at a folder of media, and open the DLNA or UPnP browser on a device on the same network. The README states it streams or transcodes many formats with little or no configuration and shares video, audio and images between most modern devices.

Official sources

  1. License: GPL-2.0
  2. Project website
  3. README
  4. Releases
  5. UniversalMediaServer/UniversalMediaServer on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/universalmediaserver-universalmediaserver.svg)](https://hysenlabs.com/projects/universalmediaserver-universalmediaserver)