What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
To restart FFmpeg after it exits unexpectedly, run it in the foreground as a systemd service and set Restart=on-failure with a deliberate delay. This can recover from observed process failures; it does not prove that viewers are receiving a healthy stream or restore every lost network connection. The “kids’” part describes the audience, not a particular input, destination, or platform, so the command below is a template rather than a ready-to-run streaming recipe.
What systemd can—and cannot—recover
Keep FFmpeg as the service’s main foreground process so systemd can observe whether it exits and how. The systemd service manual for Ubuntu Jammy identifies Restart=on-failure as the recommended setting for long-running services seeking automatic recovery from errors. It can respond to an observed process failure, but it cannot by itself tell whether a still-running FFmpeg process is delivering useful frames to the destination. Ubuntu Jammy systemd.service manual
| Recovery method | Can address | Important limitation |
|---|---|---|
| FFmpeg protocol reconnect | Some connection failures supported by the specific input protocol and build. | Options and retry behavior are protocol-specific; reconnecting an input may not detect a publishing failure at the output. |
systemd Restart=on-failure |
An observed process exit, abnormal termination, or applicable timeout. | A stalled process that remains alive may not trigger a restart. Systemd start-rate limits can also stop repeated attempts. |
network-online.target ordering |
Startup ordering based on the network manager’s configured definition of online. | It does not continuously monitor connectivity or restore it after startup. systemd network-online documentation |
| Health check or watchdog design | Potentially, a live-but-unhealthy process, if the check measures a meaningful signal. | You must define the health signal and recovery action; a generic service unit does not supply one. |
Check versions and identify the stream details
FFmpeg options generally apply to the next input or output, so their position in the command matters. Consult the documentation for your installed build and the actual source and destination before choosing flags. The online FFmpeg documentation may describe a newer revision than the one installed on Ubuntu; the cited Ubuntu Jammy systemd manual reports systemd version 249.11-0ubuntu3.22.
- Check installed versions with
ffmpeg -versionandsystemd --version. - Identify the exact input type and protocol, output destination, codecs, and ingest requirements. Check the destination platform’s current instructions rather than assuming a particular stream key format or ingest address.
- Check local FFmpeg help and the relevant protocol documentation for options supported by your build. FFmpeg’s command-line reference explains option order and input/output handling: FFmpeg command-line documentation.
The title alone does not establish whether the source is a camera, a network feed, or a local file, nor does it identify a platform, codec, moderation arrangement, or stream key. Treat every placeholder below as something to replace, not as a literal argument.
#1 Best Overall
Create a foreground systemd service
Create /etc/systemd/system/ffmpeg-livestream.service with a unit shaped like this:
[Unit]
Description=FFmpeg livestream
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=streamer
ExecStart=/usr/bin/ffmpeg [options appropriate to this source and destination] -i [INPUT] [OUTPUT_OPTIONS] [OUTPUT]
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
- Replace
streamerwith a restricted service account that can read the input and run FFmpeg. - Replace every square-bracket placeholder. Put each FFmpeg option before the input or output to which it applies; consult the command-line documentation for the syntax appropriate to your chosen source and destination.
RestartSec=5sis an illustrative delay, not a setting validated for every workload. Choose a deliberate delay so repeated failures do not cause an unnecessarily rapid restart loop.network-online.targetexpresses startup ordering against the network manager’s readiness definition. It does not guarantee that the connection remains available afterward.
Systemd start-rate limits also apply. StartLimitIntervalSec= and StartLimitBurst= govern how many starts are allowed in the configured interval. If repeated starts hit the limit, automatic attempts stop until the limit permits another start or an administrator intervenes. Check the Ubuntu Jammy systemd.service manual for the applicable behavior and local configuration.
Rank #2
Load, start, and inspect the service
- Save the unit file, then ask systemd to reload unit definitions:
sudo systemctl daemon-reload. - Enable the service for startup and start it now:
sudo systemctl enable --now ffmpeg-livestream.service. - Inspect its current state and recent status information:
systemctl status ffmpeg-livestream.service. - Follow its journal output while diagnosing it:
journalctl -u ffmpeg-livestream.service -f.
Confirm the executable path, account permissions, source access, destination settings, and behavior on your own host before relying on unattended operation. This schematic unit has not been validated for a particular Ubuntu machine or stream.
Choose reconnect behavior for the actual input
HTTP inputs
FFmpeg documents HTTP-specific options for cases such as reconnecting on disconnect, EOF, or network errors, as well as retry counts and delay limits. Use only options supported by the HTTP protocol and your installed build, and set retry behavior deliberately. These options are not universal reconnect flags for other protocols. See FFmpeg protocol documentation.
Rank #3
RTSP inputs
For RTSP, FFmpeg documents transport choices including UDP, TCP interleaving, and HTTP or HTTPS tunneling. Compatibility depends on the source and network, so select a transport only after checking the source’s requirements and testing the actual path. The RTSP transport choices do not make systemd monitor stream health.
Local media intended to repeat
If the source is a finite local media file that should play continuously, FFmpeg documents -stream_loop -1 for infinite looping. It is an input option, so place it before the relevant -i. It loops a file; it is not a reconnect option for a live camera or network source. See FFmpeg CLI documentation.
Rank #4
Handle failures that do not make FFmpeg exit
If FFmpeg remains alive while no useful frames reach the destination, Restart=on-failure may have no process failure to respond to. A real health check or watchdog needs a defined signal that represents the failure you care about—such as an appropriate input or output condition—and a deliberate action when that condition occurs. The sources cited here do not prescribe a health-check implementation for this unspecified stream. Avoid treating process status alone as proof of viewer-facing health.
Protect stream keys and source credentials
- Do not publish real RTMP/RTMPS stream keys or source credentials in unit examples.
- Avoid putting secrets in shell history or files readable by unrelated users.
- Use a restricted service account and verify which files, devices, and network resources FFmpeg needs.
- Validate any host-specific credential storage or service hardening choice; a generic sandbox recipe may block access required by your source or output.
Because the destination platform and jurisdiction are unspecified, check the platform’s current rules and applicable requirements for the intended children’s content rather than assuming one set applies everywhere.
Best Value
Or let it run in the cloud
If your goal is to keep uploaded video live on a YouTube channel, StreamNeo is a different option from supervising your own FFmpeg host: upload a recording or build a playlist, add your YouTube stream key once, and go live. StreamNeo loops uploaded video from the cloud; it does not go live from a camera and streams to YouTube only. Your computer and home connection do not have to stay on. Any quality up to 4K 60fps streams as uploaded, at one flat price per slot with no re-encode or quality tiers, and automatic recovery is available if YouTube drops the stream. The first day is free with no card, once per account. Monthly billing is $9.99 per month. UPI and cards are available in India; card checkout is available worldwide. See StreamNeo pricing for other billing lengths and details. Start the free StreamNeo day.
Optional resilience for local equipment
A UPS sized for the actual host and network equipment may help with some power interruptions. It cannot prevent source, network, FFmpeg, or platform failures, and usable runtime depends on the equipment and battery.
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.




