ModuleDraft 0.1, for comment

On this page
  1. Sketch
  2. Open questions
  3. Prior art

Delivery module (draft 0.1)

Status: draft for comment. Namespace: org.openmusiccollection.delivery. Needs: Core 1.0.

Delivery lets any app play or download a copy from a source it has no integration for: a niche streaming service, a label's own store, an artist's site, or a server someone runs at home. It is level 3 (Media) of conformance. With it, a new platform works in every app that supports OMC on the day it launches.

Sketch

A source that implements Delivery lists it in its descriptor, with the capabilities media.preview, media.stream and/or media.download. For a copy, the app asks for a playable resource with the person's token:

POST {base}/play   { "ref": "night-drive", "intent": "stream" }
→ { "url": "https://cdn.music.example.net/…", "expires_at": "…", "mime": "audio/flac",
    "kind": "full" }
  • intent is preview, stream or download; kind in the answer says what the person's account actually allows (preview or full).
  • The URL is short-lived and points at plain HTTP audio (progressive) or HLS.
  • A source that already speaks the OpenSubsonic API can declare it instead, and apps use that API directly.

Files on the person's own devices are out of scope: a home's own app on the device that sees the folder adds them as file copies, and playing them through Delivery isn't defined.

Open questions

  1. Should apps report plays back to the source, so artists are paid per stream?
  2. Offline downloads for subscription sources: allowed, and with what expiry?
  3. One consent for collection access and playback, or separate?

Prior art

The OpenSubsonic API (Navidrome and other self-hosted servers), HLS, and the way podcast apps play any feed's audio.