Repository navigation
Releases: gaming09/falcor
Release list
v0.1.28-debug
Exact restore of v0.1.25 / v0.1.22 baseline (rollback 0.1.26/0.1.27 MSE/list experiments). Amcrest listen deferred.
Tree matches eb73b23 except versionName=0.1.28, versionCode=29, and README version note.
v0.1.27-debug
Falcor 0.1.27-debug (list-first hotfix)
P0: 0.1.26 showed “Failed to load cameras” while Frigate web worked. Fix = thinner MSE page-order + harden home list; revert listen-detection expansion that ran on every getCameras → deriveCameraCapabilities.
Root-cause hypothesis
0.1.26 expanded detectListenAudio / cameraHasListenCapableStream (plain RTSP + ffmpeg heuristics) on the path used by every home list load. If any camera threw inside that map, outer runCatching failed the entire list → HomeViewModel error UI. Exact throw site still uncertain; harden + thinner patch is the fix.
Changes
- Revert
detectListenAudio/cameraHasListenCapableStreamto exact 0.1.25 (no plain-RTSP expansion on home load). - MSE-first page-order only:
preferMseFirstLivePlayer(src) = !streamHasOpusOrWebRtcFriendlyAudio(src)— dropped hasListen gate so Amcrest plain RTSP getsmse.htmlfirst without detectListen expansion. Reolink opus/A/V remux stays webrtc-first. - Per-camera
runCatchingingetCameras+rebuildCapabilityMap— log+skip failures instead of blanking the grid. - Thin SPA retained:
key(cameraName), block#cameras, require embed?src=, reload-once→OkHttp. No silentAvAdvance. - versionName
0.1.27, versionCode28.
Verify
- Home grid loads (list-first scorecard).
- FrontYard → roaming3 embed; roaming* MSE first; Reolink webrtc first.
APK
falcor-0.1.27-debug.apk attached (debug build).
v0.1.26-debug
Falcor 0.1.26-debug
Built from 0.1.25 restore (eb73b23 / exact 0.1.22 + bump). Does not reintroduce 0.1.23 silentAvAdvance or 0.1.24 candidate chaos.
Changes
- MSE-first for plain RTSP + listen-capable cameras (Amcrest AAC path Frigate web uses); webrtc-first unchanged for opus/A/V+listen remux (Reolink)
- Embed lock:
key(cameraName)fresh WebView; block#cameras//cameras/; require(webrtc|mse|stream).html?src=; non-embed → reload intended once → OkHttp - Probe snackbar includes truncated
href=for FrontYard→roaming3 proof - Unit tests: opus→webrtc-first; plain RTSP+listen→mse-first; embed URL helpers
Scorecard
- no
__falcorSilentAvAdvanceDone - plain-RTSP listen first URL is
mse.html?src= - Reolink opus first URL is
webrtc.html?src=
Residual risks
- Amcrest listen still depends on MSE embed actually delivering AAC in WebView (Frigate web hears them; app path now matches)
- If wrong-camera returns, drop Amcrest listen rather than reintroducing silent advance
v0.1.25-debug
Falcor 0.1.25-debug
Exact restore of the 0.1.22 baseline (rollback of 0.1.23/24 SPA/MSE/nav changes). Fresh reinstall tag for A R — same code as 249e947 / v0.1.22-debug with only version bumped.
- versionName
0.1.25-debug, versionCode26 - Tree matches
249e947exceptapp/build.gradle.kts+ README version lines - Does not include MSE-first, silentAvAdvance, SPA guards, or key(cameraName) from 0.1.23/24
Prior known-good APK still available: https://github.com/gaming09/falcor/releases/download/v0.1.22-debug/app-debug.apk
APK: falcor-0.1.25-debug.apk
v0.1.24-debug
P0 hotfix — open-camera correctness
Root cause: Live WebView could remain on (or redirect into) the Frigate SPA (#cameras / home). Probe src=? | other + mid-feed grey chrome + Compose title vs wrong OSD (e.g. roaming3 title / FrontYard video).
Fix (smallest):
key(cameraName)+ destroy WebView on release — fresh instance per camera- Block
#cameras//cameras/navigation - Require
(webrtc|mse|stream).html?src=(or talk/live/webrtc/*?src=); reload intended embed once, then advance candidate / OkHttp - Probe snackbar includes truncated
location.href - Freeze MSE/audio / prefer-listen ordering from 0.1.23
APK: falcor-0.1.24-debug.apk (versionName 0.1.24-debug, versionCode 25)
v0.1.23-debug
Falcor 0.1.23-debug
MSE-first live player pages when the chosen go2rtc src is not WebRTC-friendly listen (no opus / A/V+listen remux markers) — plain rtsp:// (often AAC) matches Frigate mobile web MSE path. Opus / #video=+#audio= remux stays webrtc-first (Reolink must not regress).
livePlayerPageUrls: mse before webrtc whenstreamHasOpusOrWebRtcFriendlyAudiois false; both kept for fallback- WebRTC playing with
aTracks==0→ silent candidate advance to MSE (do not wait for main-frame error) - Listen detection: plain RTSP + (
camera.audio.enabled/ ffmpeg AAC hints / aac in sources) counts for caps/snackbar; still skip audio-only*_webrtchelpers for videosrc - Keeps FalcorAudioProbe snackbar; native HTML5 controls; no applyMute resurrection; never hardcodes camera names
APK: app-debug.apk (versionName 0.1.23-debug, versionCode 24)
v0.1.22-debug
Falcor 0.1.22-debug
Prefer listen-capable A/V live sources for the WebView player; skip audio-only go2rtc helpers (ffmpeg:…#audio=opus without video — typical *_webrtc / "WebRTC Audio") that caused Reolink KidsRoom/FrontYard video to stick on the spinner.
- Live
?src=→ main A/V key (e.g.KidsRoom) with#video=+#audio=, notKidsRoom_webrtc - Main/Sub FilterChips bind to
state.quality(default MAIN); FalcorAudioProbeq=matches - Keeps FalcorAudioProbe snackbar; native HTML5 controls; no applyMute resurrection
APK: app-debug.apk (versionName 0.1.22-debug, versionCode 23)
v0.1.21-debug
Falcor 0.1.21-debug
Listen-capable live src
- Prefer
camera.live.streamsroles matching webrtc/audio/listen (e.g. WebRTC Audio) and go2rtc keys/sources with*_webrtc/#audio=/ LISTEN markers. - Fallback to classic Main/Sub when no listen-capable stream exists (video-only + snackbar).
Main/Sub remaps src=
livePlayerPageUrls/webrtcLiveUrlsno longer lock to stalecaps.liveStreamName.- Every quality change re-resolves via
resolvePreferredStreamName(preferSub=…)sowebrtc.html?src=updates.
Kept
- FalcorAudioProbe snackbar/log from 0.1.20 (verify
src=*_webrtc). - Native HTML5 controls; no AppBar
applyMute.
versionName 0.1.21 · versionCode 22
v0.1.20-debug
Falcor 0.1.20-debug — probe-only listen-audio diagnostic
- After live WebView is playing (onPageFinished + short delay,
playingevent, and ~2s later / on quality change), runs JS once that reports media state. - Snackbar (screenshot-friendly), e.g.:
q=SUB | src=cam1 | webrtc | vMute=1 vol=1 | aTracks=0 vTracks=1 | audioEls=0 | hasListen=1 - Logcat tag
FalcorAudioProbewith fuller detail (full URL, candidateIndex, per-track fields, audio elements, AudioContext hint). - Probe-only: no StreamQuality MAIN-default change, no AppBar mute / applyMute / Tap-for-sound resurrection; native HTML5 controls + WebView-primary live kept (0.1.19 model).
Diagnosis notes (no product change)
camera.audio.enabled/hasListenAudioonly inform caps UI — live URLs always requestmedia=video+audio.livePlayerPageUrlspreferscaps.liveStreamNamebefore preferSub resolution; MAIN/SUB toggle may load the samesrcif caps lock the name.resolvePreferredLiveStreamNameprefers sub role first when building caps.- Default quality remains SUB; WebRTC candidates try webrtc.html before mse.
- Likely silence causes: HTML5 autoplay
vMute=1,aTracks=0(no audio on go2rtc stream), or same silentsrcfor both qualities.
v0.1.19-debug
Falcor 0.1.19-debug
Native HTML5 controls stay visible on WebView live. User unmutes via the HTML5 bar.
Removed
- AppBar mute IconButton + WebViewAudioController.applyMute on live
- Tap-for-sound overlay
- `controls=false` / CSS hide of `::-webkit-media-controls*`
- `__falcorMuted` interval + volumechange re-sync that fought the page
- Delayed applyMute storms after page load
Kept
- WebView-primary live / PTT single surface
- Minimal chrome JS (black background / object-fit only)
- Audio focus for playback after manual unmute
versionName 0.1.19 · versionCode 20