UN

Universal Media Server

DLNA-compliant media server for streaming to TVs and consoles

Media Servers ★ 2.7k stars Easy setup GPL-2.0

Universal Media Server is a DLNA-compliant UPnP media server that streams video, audio, and images to a wide range of devices including smart TVs, game consoles, and mobile devices. It transcodes media on the fly so incompatible formats can play on almost any renderer.

Key features

  • DLNA/UPnP streaming
  • On-the-fly transcoding
  • Broad device compatibility
  • Subtitle support

Pros & cons

Strengths

  • Works with old TVs and consoles
  • Simple setup

Trade-offs

  • Dated user interface
  • Java memory footprint

Universal Media Server replaces

Last reviewed Sep 13, 2026 · 742 words

There is a television in a spare room, a PS4 under it, and neither has a Jellyfin app. That is the entire case for Universal Media Server in 2026, and it is a good one: UMS speaks DLNA, which every TV and console made in the last 15 years already understands, and it transcodes on the fly so an HEVC MKV with ASS subtitles turns into something a 2012 Samsung will actually play. It is Java, the UI looks its age, and for any screen that can run an app, Jellyfin is the better server. For the screens that cannot, UMS is the most capable option left.

DLNA is the only reason to run it, and it is still a good one

DLNA has no accounts, no watched-state sync, no metadata scraping worth the name, and no security beyond "is on the same subnet". What it has is presence: smart TVs, PS4 and PS5, Xbox, Blu-ray players, and old AV receivers all browse DLNA servers out of the box. UMS started life as a fork of PS3 Media Server in 2012, which tells you what it was built for, and 2,649 stars later it remains the DLNA server that goes furthest to make bad renderers play good files.

The comparison inside DLNA is with MiniDLNA and Gerbera. Both are lighter and both serve files as-is. If your TV plays your files natively, run MiniDLNA and forget UMS exists. UMS earns its 512 MB when the renderer refuses the codec, the container, or the subtitle format.

Renderer profiles are the actual product

Every DLNA device lies about what it supports in a slightly different way. UMS ships a renderers/ directory of per-device configuration files, matched on the device's UPnP headers, and each one says what the device can play natively, what needs remuxing, what needs full transcoding, and how subtitles should be burned in. Sony PlayStation, Samsung, LG, Panasonic, and Xbox profiles are all there. When a device works better on UMS than on Gerbera, this is why. When a device misbehaves, copy the nearest profile, fix the offending line, and UMS picks it up on restart. The transcoding itself is delegated to FFmpeg, with MEncoder and tsMuxeR as alternatives per format, and CPU is what you spend: budget one CPU core per simultaneous 1080p transcode, and do not plan on 4K transcodes on a Celeron.

Install: bare metal beats Docker here

UMS is a desktop-style Java application first and a headless server second. The native packages for Windows, macOS, and Debian-based Linux give you a tray application with a configuration GUI, and for one TV in one house that is the least painful route. Headless Linux works with the .tgz release and a systemd unit; Docker works with the official image but needs host networking because DLNA discovery relies on multicast SSDP:

services:
  ums:
    image: universalmediaserver/ums:latest
    network_mode: host
    volumes:
      - ./config:/profile
      - /mnt/media:/media:ro
    restart: unless-stopped

Two ports matter: 5001 is the media server HTTP port the renderers pull from, and 9001 is the web interface, which includes a browser-based player that is a reasonable fallback for laptops. Mount the media read-only; UMS never needs to write to it.

The Java footprint and the dated UI are the real costs

The catalogue's 512 MB is the floor. Java idles higher than a Go or Rust server, and a big library scan plus one transcode will push past 1 GB on a busy evening. The configuration GUI has the layout of a mid-2000s desktop app, the web UI is functional rather than pleasant, and there is no metadata layer that competes with Jellyfin's posters and continue-watching rows. None of that stops it working; all of it stops it being the server you show people.

What I'd do

Run Jellyfin as the primary server, and follow the Jellyfin setup guide for the screens that can run its app. Add UMS only for the specific devices Jellyfin cannot reach, pointed at the same read-only media share, with host networking and its own 1 GB of headroom. Fix one renderer profile per stubborn device rather than fighting the global transcode settings. When the last DLNA-only device in the house is replaced, delete UMS and nothing else in the media server stack will notice.

Compare Universal Media Server

19 head-to-head comparisons.

Similar media servers apps