Skip to main content

ovos-media — OCP-native audio/video/web media service for OpenVoiceOS

Project description

ovos-media

The OVOS Virtual Media Player — a standalone daemon that plays audio, video and web content on behalf of OpenVoiceOS, with per-session playback state, MPRIS/D-Bus integration and a pluggable backend architecture.

ovos-media implements OCP — OVOS Common Playback: one logical media player per session that every media voice command targets. It arbitrates both OVOS-initiated playback ("play jazz") and transport control ("pause", "next", "stop the music"), and because it bridges to the host OS over MPRIS, even playback OVOS did not start — a browser tab, a desktop player — is controllable by voice as long as it speaks the open standard. The concept is specified in OVOS-OCP-1.

ovos-media is the modern replacement for the legacy audio service (the ovos-ocp-audio-plugin bundled inside ovos-audio). It splits the monolith into small, swappable pieces: the OCP pipeline finds media, providers supply catalogs, backends play streams, extractors resolve URIs.


How it fits together

 "play jazz on the kitchen speaker"
              │
              ▼
   ovos-core ─ OCP pipeline (ovos-ocp-pipeline-plugin)
              │   classify media type + parse the request
              │   query MediaProvider plugins, rank results
              ▼
   ovos-media (this daemon)
              │   pick a playback backend, manage the queue / now-playing,
              │   expose state over the bus / MPRIS / GUI
              ▼
   playback backend (opm.media.audio | .video | .web)
              │   hand the URI to vlc / mpv / spotify / chromecast / browser …
              ▼
   stream extractor (opm.ocp.extractor) resolves youtube//… , rss//… , file://…

Every arrow is a plugin boundary, so each piece can be replaced independently:

Concern Plugin group Examples
Find media (catalogs/search) opm.media.provider youtube, bandcamp, soundcloud, tunein, somafm, …
Play audio opm.media.audio vlc, mplayer, simple, spotify, chromecast
Play video opm.media.video vlc, mpv, chromecast
Render web/webview opm.media.web browser, gui
Resolve a stream URI opm.ocp.extractor youtube, m3u, rss, files

Search results flow as mediavocab.Release objects — a typed catalog model shared across the whole media ecosystem — so a provider written once works for playback, MPRIS metadata and the GUI alike.


Install

pip install ovos-media

Install at least one playback backend (audio is the minimum to hear anything):

pip install ovos-media-plugin-vlc        # or -mplayer / -simple / -spotify / -chromecast

Enable it

ovos-media runs alongside ovos-audio (which keeps handling TTS). Turn off the legacy audio service and run the daemon:

// mycroft.conf
{
  "enable_old_audioservice": false
}
ovos-media          # start the daemon

That's it — ask OVOS to play something and the OCP pipeline will route it here.


Configuration

All configuration lives under the "media" key in mycroft.conf. The essentials:

{
  "media": {
    // MPRIS / D-Bus integration (off by default)
    "enable_mpris": false,
    // let MPRIS pause/stop other media players on the system
    "manage_external_players": false,

    // order of preference per playback type; the first backend that can
    // handle the URI wins. Users may also name a backend in the utterance.
    "preferred_audio_services": ["gui", "vlc", "mplayer", "cli"],
    "preferred_video_services": ["gui", "vlc"],
    "preferred_web_services":   ["gui", "browser"],

    // declare the backends available to each playback type.
    // "module" is the plugin's entry-point name; "aliases" are spoken names.
    "audio_players": {
      "vlc": { "module": "ovos-media-audio-plugin-vlc", "aliases": ["VLC"], "active": true },
      "cli": { "module": "ovos-media-audio-plugin-cli", "aliases": ["Command Line"], "active": true }
    },
    "video_players": {
      "vlc": { "module": "ovos-media-video-plugin-vlc", "aliases": ["VLC"], "active": true }
    },
    "web_players": {
      "browser": { "module": "ovos-media-web-plugin-browser", "aliases": ["Browser"], "active": true }
    }
  }
}

See docs/configuration.md for every option (per-backend config, MPRIS roles, GUI update interval, queue behaviour).


Documentation

Start at docs/index.md.


Status

ovos-media is the upcoming default playback stack and is opt-in today. The MediaProvider plugin model that supplies catalogs is replacing the older OCP skills approach — see docs/media-providers.md for the current migration state.


Credits

The original OCP dataset used to train the media classifiers was sponsored by @NeonGeckoCom as part of The OCP Sprint. More recent media-metadata datasets are maintained by TigreGotico and published in the Media Metadata collection on Hugging Face.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ovos_media-0.1.0a1.tar.gz (39.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ovos_media-0.1.0a1-py3-none-any.whl (44.9 kB view details)

Uploaded Python 3

File details

Details for the file ovos_media-0.1.0a1.tar.gz.

File metadata

  • Download URL: ovos_media-0.1.0a1.tar.gz
  • Upload date:
  • Size: 39.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ovos_media-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 20e1aa12743fa1f2bb313ff4fbe161fc5a980b1e7ea5346e8f553a28066d5385
MD5 7a50f97806e98fb65aa9dbf48bc3b6b2
BLAKE2b-256 57d63bc449355ab43def858a9d051dc53e40365b39776295ab3d4797b0facb3b

See more details on using hashes here.

File details

Details for the file ovos_media-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: ovos_media-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 44.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ovos_media-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 f8dfafdde21d450f99e14b45adcbb9c4f0eee21d36a6084dbd3a79266d25b6b5
MD5 a00c18e77be23b8840800c7092316ddd
BLAKE2b-256 5142e26dee7e731f462f8944bb411ffb53d054d75dd4dcce53f5c1d84493e9d4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page