{"id":13582240,"url":"https://github.com/anacrolix/dms","last_synced_at":"2025-06-14T14:08:44.689Z","repository":{"id":29886497,"uuid":"33431919","full_name":"anacrolix/dms","owner":"anacrolix","description":"A UPnP DLNA Digital Media Server that includes basic video transcoding. Tested on a Panasonic Viera television, several Android UPnP apps, and Chromecast.","archived":false,"fork":false,"pushed_at":"2025-05-20T02:20:11.000Z","size":909,"stargazers_count":673,"open_issues_count":21,"forks_count":103,"subscribers_count":37,"default_branch":"master","last_synced_at":"2025-05-20T03:26:36.104Z","etag":null,"topics":["dlna","ffmpeg","go","upnp","upnp-av"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anacrolix.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"anacrolix","patreon":"anacrolix","issuehunt":"anacrolix"}},"created_at":"2015-04-05T05:52:38.000Z","updated_at":"2025-05-20T02:20:15.000Z","dependencies_parsed_at":"2023-12-23T12:34:37.933Z","dependency_job_id":"c9edb1dd-0c14-483c-8bba-bc3ce4912456","html_url":"https://github.com/anacrolix/dms","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/anacrolix/dms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacrolix%2Fdms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacrolix%2Fdms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacrolix%2Fdms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacrolix%2Fdms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anacrolix","download_url":"https://codeload.github.com/anacrolix/dms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacrolix%2Fdms/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259827668,"owners_count":22917714,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dlna","ffmpeg","go","upnp","upnp-av"],"created_at":"2024-08-01T15:02:31.491Z","updated_at":"2025-06-14T14:08:44.638Z","avatar_url":"https://github.com/anacrolix.png","language":"Go","funding_links":["https://github.com/sponsors/anacrolix","https://patreon.com/anacrolix","https://issuehunt.io/r/anacrolix"],"categories":["HarmonyOS","Go","go"],"sub_categories":["Windows Manager"],"readme":"Funding\n=======\n\ndms is looking for funding for further development. See https://github.com/sponsors/anacrolix and the issues list if you have something specific in mind. Thank you for your support!\n\ndms\n===\n\ndms is a UPnP DLNA Digital Media Server. It runs from the terminal, and serves\ncontent directly from the filesystem from the working directory, or the path\ngiven. The SSDP component will broadcast and respond to requests on all\navailable network interfaces.\n\ndms advertises and serves the raw files, in addition to alternate transcoded\nstreams when it's able, such as mpeg2 PAL-DVD and WebM for the Chromecast. It\nwill also provide thumbnails where possible.\n\ndms also supports serving dynamic streams (e.g. a live rtsp stream) generated \non the fly with the help of an external application (e.g. ffmpeg).\n\ndms uses ``ffprobe``/``avprobe`` to get media data such as bitrate and duration, ``ffmpeg``/``avconv`` for video transoding, and ``ffmpegthumbnailer`` for generating thumbnails when browsing. These commands must be in the ``PATH`` given to ``dms`` or the features requiring them will be disabled.\n\n.. image:: https://i.imgur.com/qbHilI7.png\n\n.. image:: https://raw.githubusercontent.com/anacrolix/dms/f9fb798ec360c2d2c11ba3071b95efbeddca2c02/dms-8player.png\n\nInstalling\n==========\n\nAssuming ``$GOPATH`` and Go have been configured already::\n\n    $ go install github.com/anacrolix/dms@latest\n\nEnsure ``ffmpeg``/``avconv`` and/or ``ffmpegthumbnailer`` are in the ``PATH`` if the features depending on them are desired.\n\nTo run::\n\n    $ \"$GOPATH\"/bin/dms\n\nRunning DMS using Docker\n========================\n\n`dms` is distributed as Docker Image. Serve Media in `/mediadirectory` using `dms`:\n\n.. code-block:: bash\n\n   docker pull ghcr.io/anacrolix/dms:latest\n   docker run -d --network host -v /mediadirectory:/dmsdir ghcr.io/anacrolix/dms:latest\n\nRunning DMS as a systemd service\n=================================\n\nA sample systemd `.service` file has been `provided \u003chelpers/systemd/dms.service\u003e`_ to assist in running DMS as a system service.\n\nRunning DMS as a FreeBSD service\n================================\n\nInstall the `provided \u003chelpers/bsd/dms\u003e`_ service file to /etc/rc.d or /usr/local/etc/rc.d\nadd ``dms_enable=\"YES\"``, and optionally ``dms_root=\"/path/to/my/media\"`` and ``dms_user=\"myuser\"`` to your /etc/rc.conf\n\nKnown Compatible Players and Renderers\n======================================\n\n * Probably all Panasonic Viera TVs.\n * Android's BubbleUPnP and AirWire\n * Chromecast\n * VLC\n * LG Smart TVs, with varying success.\n * Roku devices\n * Apple TV 4K via VLC and 8player\n * iOS VLC and 8player\n\n\nUsage of dms:\n=====================\n\n.. list-table:: Usage\n   :widths: auto\n   :header-rows: 1\n\n   * - parameter\n     - description\n   * - ``-allowDynamicStreams``\n     - turns on support for `.dms.json` files in the path\n   * - ``-allowedIps string``\n     - allowed ip of clients, separated by comma\n   * - ``-config string``\n     - json configuration file\n   * - ``-deviceIcon string``\n     - device icon\n   * - ``-deviceIconSizes string``\n     - device icon sizes, separated by comma\n   * - ``-fFprobeCachePath string``\n     - path to FFprobe cache file (default \"/home/efreak/.dms-ffprobe-cache\")\n   * - ``-forceTranscodeTo string``\n     - force transcoding to certain format, supported: 'chromecast', 'vp8'\n   * - ``-friendlyName string``\n     - server friendly name\n   * - ``-http string``\n     - http server port (default \":1338\")\n   * - ``-ifname string``\n     - specific SSDP network interface\n   * - ``-ignoreHidden``\n     - ignore hidden files and directories\n   * - ``-ignoreUnreadable``\n     - ignore unreadable files and directories\n   * - ``-ignore``\n     - ignore comma separated list of paths (i.e. -ignore thumbnails,thumbs)\n   * - ``-logHeaders``\n     - log HTTP headers\n   * - ``-noProbe``\n     - disable media probing with ffprobe\n   * - ``-noTranscode``\n     - disable transcoding\n   * - ``-notifyInterval duration``\n     - interval between SSPD announces (default 30s)\n   * - ``-path string``\n     - browse root path\n   * - ``-stallEventSubscribe``\n     - workaround for some bad event subscribers\n   * - ``-transcodeLogPattern``\n     - pattern where to write transcode logs to. The ``[tsname]`` placeholder is replaced with the name of the item currently being played. The default is ``$HOME/.dms/log/[tsname]``. You may turn off transcode logging entirely by setting it to ``/dev/null``. You may log to stderr by setting ``/dev/stderr``.\n\nAn example json configuration file::\n\n    {\n      \"path\": \"/path/to/media/files\",\n      \"friendlyName\": \"dms\",\n      \"noTranscode\": true,\n      \"deviceIcon\": \"/path/to/icon.png\",\n      \"deviceIconSizes\": [\"48:512\",\"128:512\"]\n    }\n\nDynamic streams\n===============\nDMS supports \"dynamic streams\" generated on the fly. This feature can be activated with the\n``-allowDynamicStreams`` command line flag and can be configured by placing special metadata\nfiles in your content directory.\nThe name of these metadata files ends with ``.dms.json``, their structure is `documented here \u003chttps://pkg.go.dev/github.com/anacrolix/dms/dlna/dms\u003e`_.\n\nAn example::\n\n    {\n      \"Title\": \"My awesome webcam\",\n      \"Resources\": [\n         {\n            \"MimeType\": \"video/webm\",\n            \"Command\": \"ffmpeg -i rtsp://10.6.8.161:554/Streaming/Channels/502/ -c:v copy -c:a copy -movflags +faststart+frag_keyframe+empty_moov -f matroska -\"\n         }\n      ]\n    }\n\nBy default, dynamic content is treated as video. It is possible to specify a \"Type\" parameter with value \"audio\" or \"video\" to explicitly set this.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanacrolix%2Fdms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanacrolix%2Fdms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanacrolix%2Fdms/lists"}