Commit 0a0eabf
fix(media): say why a video-only file will not play instead of blaming a missing plug-in
Playing a file with no audio track on an item whose video output is disabled --
or whose display is unplugged, which drops FPP into the same fallback -- produced
three messages, each pointing somewhere the problem was not:
GStreamer sync error (src=decodebin0): Your GStreamer installation is missing a plug-in.
GStreamer sync error (src=qtdemux0): Internal data stream error.
GStreamer: pipeline never reached PLAYING within 15000ms — A PipeWire restart
under a running fppd does this; fppd must be restarted to reconnect.
Nothing was missing, the stream was not corrupt, and PipeWire was uninvolved. The
audio-only fallback pins decodebin to caps="audio/x-raw", so a file with no audio
gives it nothing to expose and the autoplug failure surfaces as a missing plug-in.
Reported as #2839, where it cost the reporter a hunt for absent packages.
Only that fallback is affected. The video pipeline links its pads by hand and
OnNoMorePads already tears down the unconnected audio chain for video-only media,
so with a display attached these files play silently and correctly -- confirmed on
a Pi with an HDMI display, where the same file plays clean with the video output
set and fails the moment it is disabled.
So name the fallback's decodebin and watch pad-added. GStreamer itself then
answers whether the file yielded decodable audio: no probe, no TagLib guess (its
zero-channel answer cannot distinguish "no audio track" from "container I cannot
parse"), and nothing added to the normal start path. The demuxer's follow-on
error is folded into the same event rather than logged as a second, unrelated
failure, and the raw GStreamer wording is kept at debug level.
A missing audio pad is not on its own evidence about the file, which the first
version of this got wrong: stop PipeWire under a running fppd, play a plain WAV,
and pwsink errors before decodebin ever gets that far -- reporting a backend
outage as "this file has no audio" is a worse lie than the one being fixed. The
error has to come from inside the decode chain too, so the source is walked up
GST_OBJECT_PARENT to the named decodebin before the file is blamed.
Separately, the preroll check reported GST_STATE_CHANGE_FAILURE and a genuine
timeout identically. An element that errors returns FAILURE at once, so the
message claimed a 15-second wait it never made and named a PipeWire restart that
never happened -- for any failure at all. Split the two: FAILURE points at the
error the bus handler has already logged, and only a real timeout keeps the
stale-connection advice. Both paths verified on a single-core AM335x board,
which is slow enough to lose the race to the bus handler and take that branch.
The entry still ends rather than holding its duration, so a playlist advances
early past such an item; making it consume the full duration means synthesising
playback timing and is left alone here.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>1 parent 1ce4f64 commit 0a0eabf
2 files changed
Lines changed: 115 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1666 | 1666 | | |
1667 | 1667 | | |
1668 | 1668 | | |
1669 | | - | |
| 1669 | + | |
1670 | 1670 | | |
1671 | 1671 | | |
1672 | 1672 | | |
| |||
1685 | 1685 | | |
1686 | 1686 | | |
1687 | 1687 | | |
| 1688 | + | |
| 1689 | + | |
| 1690 | + | |
| 1691 | + | |
| 1692 | + | |
| 1693 | + | |
| 1694 | + | |
| 1695 | + | |
| 1696 | + | |
| 1697 | + | |
| 1698 | + | |
| 1699 | + | |
1688 | 1700 | | |
1689 | 1701 | | |
1690 | 1702 | | |
| |||
1911 | 1923 | | |
1912 | 1924 | | |
1913 | 1925 | | |
1914 | | - | |
1915 | | - | |
1916 | | - | |
| 1926 | + | |
| 1927 | + | |
| 1928 | + | |
1917 | 1929 | | |
1918 | | - | |
1919 | | - | |
1920 | | - | |
1921 | | - | |
1922 | | - | |
1923 | | - | |
1924 | | - | |
| 1930 | + | |
| 1931 | + | |
| 1932 | + | |
| 1933 | + | |
| 1934 | + | |
| 1935 | + | |
| 1936 | + | |
| 1937 | + | |
| 1938 | + | |
| 1939 | + | |
| 1940 | + | |
| 1941 | + | |
| 1942 | + | |
| 1943 | + | |
| 1944 | + | |
| 1945 | + | |
| 1946 | + | |
| 1947 | + | |
| 1948 | + | |
| 1949 | + | |
| 1950 | + | |
| 1951 | + | |
| 1952 | + | |
| 1953 | + | |
1925 | 1954 | | |
1926 | 1955 | | |
1927 | 1956 | | |
| |||
2963 | 2992 | | |
2964 | 2993 | | |
2965 | 2994 | | |
2966 | | - | |
| 2995 | + | |
| 2996 | + | |
| 2997 | + | |
| 2998 | + | |
| 2999 | + | |
| 3000 | + | |
| 3001 | + | |
| 3002 | + | |
| 3003 | + | |
| 3004 | + | |
| 3005 | + | |
| 3006 | + | |
| 3007 | + | |
| 3008 | + | |
| 3009 | + | |
| 3010 | + | |
| 3011 | + | |
| 3012 | + | |
| 3013 | + | |
| 3014 | + | |
| 3015 | + | |
| 3016 | + | |
| 3017 | + | |
| 3018 | + | |
| 3019 | + | |
| 3020 | + | |
| 3021 | + | |
| 3022 | + | |
| 3023 | + | |
| 3024 | + | |
| 3025 | + | |
| 3026 | + | |
| 3027 | + | |
| 3028 | + | |
| 3029 | + | |
| 3030 | + | |
| 3031 | + | |
| 3032 | + | |
| 3033 | + | |
| 3034 | + | |
| 3035 | + | |
| 3036 | + | |
| 3037 | + | |
| 3038 | + | |
| 3039 | + | |
| 3040 | + | |
| 3041 | + | |
| 3042 | + | |
| 3043 | + | |
| 3044 | + | |
| 3045 | + | |
| 3046 | + | |
| 3047 | + | |
| 3048 | + | |
2967 | 3049 | | |
2968 | 3050 | | |
2969 | 3051 | | |
| |||
3567 | 3649 | | |
3568 | 3650 | | |
3569 | 3651 | | |
| 3652 | + | |
| 3653 | + | |
| 3654 | + | |
| 3655 | + | |
| 3656 | + | |
| 3657 | + | |
| 3658 | + | |
| 3659 | + | |
| 3660 | + | |
3570 | 3661 | | |
3571 | 3662 | | |
3572 | 3663 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
229 | 241 | | |
230 | 242 | | |
231 | 243 | | |
| |||
0 commit comments