Use two independent checks: supervise FFmpeg on the host and query YouTube’s Live Streaming API for the incoming stream’s status and health. A running FFmpeg process does not prove YouTube is receiving usable video, and an API response alone does not prove the local encoder is progressing. Keep those results separate so an API or credential problem does not trigger an unnecessary FFmpeg restart.
What the monitor should check
A reliable monitor reports what it can actually observe rather than collapsing every signal into “up” or “down.” The local check covers the encoder process and its progress. YouTube’s API covers the feed arriving at YouTube and its reported configuration health. A broadcast check, when needed, covers the viewer-facing event. The YouTube liveStream resource and liveBroadcast resource represent different parts of that chain.
As an Amazon Associate I earn from qualifying purchases.
- Process missing: FFmpeg is no longer running.
- Process present, no recent progress: it may be blocked or stalled even though the process exists.
- Local output progressing: the encoder is producing output; this does not establish that YouTube is receiving it.
- YouTube stream inactive or error: YouTube reports that it is not receiving the feed or has an error condition.
- YouTube health bad: the health report contains at least one error-severity issue.
- YouTube health unknown: no health data is available, the data is stale, or the API check failed. Do not label this healthy.
- Broadcast state: the event’s lifecycle status, which is separate from the incoming stream status.
These are monitoring design recommendations, not a prescribed YouTube script or universal threshold. The API documentation defines the available signals, but not a polling interval, freshness window, or automatic-restart policy.
Check the local FFmpeg process and progress
Run FFmpeg under a service manager or equivalent supervisor so its exit status and logs are retained and an intentional restart policy can be applied. Add a progress signal tied to the actual FFmpeg invocation and media pipeline; process existence alone cannot detect a blocked encoder, a broken connection, or unusable output. The right progress mechanism depends on your command, host operating system, and FFmpeg build, so verify it in your environment rather than treating a generic process check as a complete health check.
#1 Best Overall
- Raspberry Pi 5 with 8GB RAM: Model SC1112 featuring a quad-core ARM Cortex-A76 processor running at 2.4GHz. Enhanced Connectivity: Includes dual 4K micro HDMI ports, USB-C power input, and high-speed USB 3.0 ports. PCIe Expansion Support: FPC connector enables M.2 NVMe SSDs when using compatible adapters. Fast Storage Options: Works with microSD cards for booting, or optional NVMe storage for advanced projects. Built for Projects & Learning: Ideal for programming, home labs, DIY electronics, automation, and Linux-based development.
Record the local result independently from YouTube’s API result. That separation lets an operator tell the difference between an encoder exit, an encoder stall, and a remote status or authentication problem.
Query YouTube’s incoming stream status and health
Authenticate for the channel whose stream you own, then read the relevant liveStream resource’s status. Its status.streamStatus field has distinct meanings:
active: YouTube is receiving data via the stream.created: the stream exists but has no valid CDN settings.ready: the stream has valid CDN settings. This does not mean it is active or that data is currently arriving.inactive: YouTube is not receiving the user’s stream.error: an error condition exists.
Also inspect status.healthStatus, rather than treating an active feed as proof that its configuration is sound:
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →goodmeans there are no issues at warning severity or worse.okmeans there are no error-severity issues; warning-level issues may still exist.badmeans at least one issue has error severity.noDatameans YouTube has no health-status information. Treat it as unknown, not as a clean bill of health.
The health object can include lastUpdateTimeSeconds and configurationIssues[]. Preserve the update time and each issue’s type, severity, reason, and description in logs or alerts. Check the timestamp’s age against a freshness limit you choose for your deployment; YouTube documents the timestamp but does not specify a universal freshness window. lastUpdateTimeSeconds is UNIX time in seconds.
Rank #3
- Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC @ 1. 5GHz
- 2. 4 GHz and 5. 0 GHz IEEE 802. 11b/g/n/ac wireless LAN, Bluetooth 5. 0, BLE
- 2 × USB 3. 0 ports, 2 x USB 2. 0 Ports
- 2 × micro HDMI ports supproting up to 4Kp60 video resolution
- Micro SD card slot for loading operating system and data storage
When making an API request, request the resource fields needed for the check, including status and health information, and use the stream associated with the feed you intend to monitor. Resource datetime fields elsewhere in the API use ISO 8601 formats; do not parse them as if they were the health timestamp.
Optionally check the viewer-facing broadcast lifecycle
A liveBroadcast describes the event viewers see, not the incoming feed itself. Its lifecycle can include created, ready, liveStarting, live, complete, revoked, testStarting, and testing. A broadcast can therefore have a lifecycle status that answers a different question from whether the bound stream is active.
Rank #4
- Broadcom BCM2712 2.4GHz quad-core 64-bit Arm Cortex-A76 CPU, with cryptography extensions, 512KB per-core L2 caches and a 2MB shared L3 cache
- Dual-band 802.11ac Wi-Fi Bluetooth 5.0 / Bluetooth Low Energy (BLE)
- 2 × USB 3.0 ports, supporting simultaneous 5Gbps operation / 2 × USB 2.0 ports
- Gigabit Ethernet, with PoE+ support (requires separate PoE+ HAT)
- The Raspberry Pi 27W USB-C Power Supply is recommended for delivering the power you need to keep you Raspberry Pi running at peak performance
To list broadcasts, the liveBroadcasts.list method supports a status part, filters including broadcastStatus (active, all, completed, or upcoming), and mine=true to filter to the authenticated owner’s broadcasts. The method documents youtube.readonly as an accepted authorization scope. The API can return permission or live-streaming eligibility errors, so report a failed query separately from a stream failure.
For a monitor that only reads and alerts, there is usually no need to change broadcast state. If you deliberately automate a transition to testing or live, YouTube requires the bound stream to be active; the transition operation is authorized and can return inactive-stream or invalid-transition errors. See LiveBroadcasts: transition.
Best Value
- Design for Raspberry Pi: Supports installation of 4 Raspberry Pis and 4 ssds, compatible with any 2.5” Solid State Drive (7mm/9mm) and Rpi 4B/3B+, and other B/B+ models.
- The SSD mounting bracket also has two holes reserved for the SD card extension adapter ASIN: B09CKRDFTH, which allows you to access the SD card from the front of the rack.
- Easy to Setup: Just use two included thumbscrews to mount the rackmount, which adopts a screw-in design, which helps you install and replace quickly and easily, no tools needed!
- Applications: This is a hardware solution to get ingenious use of the Raspberry Pi, with this kit and open source software OpenMediaVault, you can use the Pi as a NAS Server, Surveillance station, or even a Web server.
- Optional accessories: Single mounting bracket: B09GFQLPTY; Micro SD card extension adapter ASIN: B09CKRDFTH. I/O Panel: B09FXRQPFM
Combine the checks without confusing their results
| Check | What it can establish | What it cannot establish by itself | Dependencies and response |
|---|---|---|---|
| Local process and progress | Whether FFmpeg exists and whether the chosen local progress signal is advancing. | Whether YouTube is ingesting the feed or reporting stream-health issues. | Host-level supervision and logs; restart only for a defined local failure. |
| YouTube stream API | Whether YouTube reports the feed as active, inactive, ready, or in error, plus health status and configuration issues when available. | Whether the local FFmpeg process is alive and progressing. | Authorized API access; distinguish API/authentication failure and unknown or stale health data from an ingest failure. |
| Broadcast API | The event’s lifecycle status, such as starting, live, testing, or complete. | Local encoder progress or, by itself, the full quality of the incoming feed. | Authorized broadcast query; useful when monitoring the viewer-facing event is part of the requirement. |
Use a combined report that keeps these dimensions visible. For example, “FFmpeg progressing; stream inactive” points toward ingest connectivity or stream binding, while “FFmpeg absent; API query failed” means the remote state is not known yet. These are different incidents and should not share an automatic response.
Set recovery, alerting, and escalation rules
Separate detection from remediation. A service manager can restart FFmpeg when it exits, subject to a retry and backoff policy. If YouTube reports inactive or error, inspect FFmpeg logs and ingest connectivity before deciding whether a restart is appropriate. If health is bad, include the individual configuration issue and severity in the alert. If the API returns an error, or health is noData, surface an unknown check result rather than asserting that the stream is healthy or restarting FFmpeg automatically.
Before enabling recovery, define these choices for your own stream’s downtime tolerance and failure modes:
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →- Which exact signals constitute a failure, and how long must a condition persist before action?
- How many restarts are allowed within a time window, and what backoff follows repeated failures?
- What process status, API response, timestamps, and health issues are logged?
- When does the system stop retrying and alert a human?
- Which conditions can trigger an automatic restart, and which only generate an alert?
These thresholds are operational choices, not YouTube requirements. Avoid making every failed API request a restart trigger: expired credentials, insufficient permission, temporary API errors, network problems, and an actual ingest failure require different diagnosis. The list method documents insufficient live permissions and live-streaming eligibility errors, which should be visible as API-check failures rather than misreported as stream health.
Or let it run in the cloud
If your goal is simply to keep uploaded video looping as a YouTube live stream, StreamNeo is a cloud alternative: upload a recording or build a playlist, add your YouTube stream key, and go live. It runs without a computer or home connection staying on; uploaded video streams as made, up to 4K 60fps, at one flat price per slot, and it automatically recovers if YouTube drops the stream. The first day is free with no card. Monthly pricing is $9.99 per month. This is for uploaded videos, not going live from a camera, and StreamNeo streams to YouTube only. Start the free first day.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

