obs_media_status
Verify which OBS media sources are actively playing. It surveys every ffmpeg/vlc input and can sample twice to catch feeds that show PLAYING but never advance.
Instructions
Survey what media sources are actually playing. With no inputName it checks EVERY media input (ffmpeg_source and vlc_source) in one go, which is the form you almost always want: the failure worth catching is 'one of them quietly ended', and you cannot spot that by asking about a source you already suspect.
THE TRAP: mediaState PLAYING does not mean video or audio is arriving. A disconnected SRT feed sits at PLAYING with its cursor frozen at 0 forever - measured on the reference machine, every media input claimed PLAYING and only the cursor separated the working ones from a dead feed. Pass probeMs (e.g. 2000) to take a second sample and get advancing:true/false per source, computed from whether cursorMs actually moved. That is the only honest liveness test.
Why it matters here: background music is an ffmpeg_source named a looping media source whose next track is queued by a Node process listening for MediaInputPlaybackEnded. When that listener dies the source parks in state 'ended' and every other indicator - process table, supervisor, dashboard - stays green. That gap once hid seventeen hours of silence. state:'ended' on a looping media source is the whole diagnosis.
Note durationMs is null for live feeds: OBS returns INT64_MIN, not null, for a stream with no end, so unboundedDuration:true flags a live source rather than a broken one.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| probeMs | No | Wait this many ms and sample again, reporting advancing:true only if the cursor moved. 2000 is plenty. 0 (default) does a single sample and cannot tell playing from stalled. | |
| inputName | No | One media input to check. Omit to survey all of them. | |
| inputUuid | No | UUID instead of a name. Ignored when surveying all. |