The version lives in versionName in android/app/build.gradle (v2) and in
app/build.gradle (basic). Builds are published only as the
latest release, which holds the
newest v2 and basic builds; each new v2 version also goes to the OpenIPC Telegram channel as its APK. There are no releases
per version (#194). Since #229 the release is titled Decoder <v2 version>, its tag is on the
built v2 commit, its notes give each branch's version and commit, and the Telegram channel gets the APK of each new v2 version rather than every build. This file is the change history: one section per v2 version, newest
first, then the legacy basic line.
Versions after 2.17 are MAJOR.MINOR.PATCH (2.17 is followed by 2.17.1 or 2.18.0; see
docs/testing.md, "Versions and releases"); the headings below keep the numbers as they
were released.
udp://slots and the U cell: the receive thread runs at the audio priority, so a push no longer loses datagrams in a loaded 3×3 grid; before, key-frame bursts still overflowed the socket buffer while the thread waited for the CPU (#253).
udp://slots and the U cell: a thread of its own reads the socket into a ring of 1024 datagrams, so key-frame bursts no longer overflow the small socket buffer an app gets (rmem_max) while the decoder or the UI hold up the receive; the log shows the buffer the kernel gave. While the U cell receives a push, the other slots get no stream checks, which made the box drop datagrams./stats.jsonaddsudpto the cell:rcvbuf,received,ring_dropped,rtp_lostand, where the app may read it,socket_drops(#251).
- Single view: the decoder is set up for the stream's size from its SPS, so streams above
1080p (e.g. 2304×1296) play on hardware decoders that cannot find the size themselves; a
hardware decoder that gives no frame at a size it does not declare hands the stream to a
software one after 5 s.
/stats.jsonshowssizeonly while a picture is shown, and addsstream_sizeanddecoder(PR #220, #166).
- Snapshot (
/snapshot.jpg, the debug page): the single view's picture keeps its aspect ratio in its cell, as on the screen, so a turned (portrait) slot is no longer stretched to 16:9 (#248).
- Mirror in the camera settings, next to Turn: flips the picture left to right in the single view and the grid, for H.264, H.265 and MJPEG; a mirrored H.264/H.265 slot is drawn with OpenGL ES (PR #246, closes #226).
- Turn in the camera settings (Auto, 0°, 90°, 180°, 270°), stored per slot; H.264/H.265 are
turned by the decoder (Android 6+), MJPEG by the view; Auto keeps the URL's
?rotate=and the toys' defaults (PR #225, part of #201).
- Jieli YL3 toys: frames built from several pieces in one datagram, no more freezes and broken colours (PR #224, closes #187).
- A flaky unit test of the RTSP heartbeat is stable again (PR #227).
- Toy drones: FLOW-UFO (
flowufo://), KY UFO RTSP (MJPEG turned 270°,?rotate=overrides it) and Jieli (PR #215, part of #187, closes #200).
- A swipe from the screen edge (pulling the status bar) no longer opens the menu (PR #216, #213).
- The system bars stay hidden over the video on Android 15, the debug page shows only LAN addresses, the menu no longer leaks over other windows (PR #206, #202, #203, #205).
- Save report: stats and the log in one file, from the app and from the debug page (PR #208, #207).
- A transient decoder loss no longer drops the learnt decoding capacity to the floor (PR #190, #189).
- Releases: only
latestand test pre-releases, no release per version (PR #195, #194); docs onmapping.txt(#193).
- The single view draws on a SurfaceView instead of a TextureView, which stalled on some TV boxes (PR #185, #76).
- Smaller APK: launcher icon / TV banner and the debug page (PR #184, part of #181).
- WebUI inside the system bars on Android 15 (PR #180, #169).
- CI keeps the R8
mapping.txtof every build and release, to read obfuscated stack traces (PR #183, #181).
- The menu as an 8 / 4 / 4 grid with words; the debug page's Info is off by default (PR #178, #174, #176, #177).
- Reset in the menu clears all settings after a confirmation; the menu in two columns (PR #172, #171, #173).
- The picture size comes from the decoder's crop rectangle: 1080p streams are no longer shown as 1920×1088, and the single view keeps the aspect ratio (PR #167, #166).
- The debug page keeps the grid in the single view, with short stream checks (PR #163, #100).
- WebUI full screen, resized above the on-screen keyboard (PR #161, #160).
- Issue forms in English, Chinese and Russian; a fixed title for device reports (PR #164).
- S is the playback mode (every frame or key frames only) in every view, Q is the view (PR #155, #153).
- A release of its own for every 2.xx version (PR #158, #157); replaced by
latestonly in 2.10.
- Version 2.00 for the
v2branch (versionCode25);basicstays 1.07.1, so av2build installs over it. The version is shown fromversionNameeverywhere: the menu, the debug page,/stats.json, the user agent (PR #154, #152).
Versions 1.x of the v2 line, up to 1.28 (2026-05-04) and the work merged until
2026-10-13 (PRs up to #147): see the git history and the merged pull requests.
basic is the original app, decoder.apk in the latest release; it gets fixes only.
- Released as 1.07.1 (written 1.7.1 since #230). Robust RTSP handshake, end-of-stream handling, thread lifecycle and SDP parsing (PR #41, #36–#40).
- The WebUI window works on older devices. Earlier versions (1.04–1.06): see "Version
history" in the README of the
basicbranch.