A small Android app for watching RTSP streams from IP cameras, with hardware H.264/H.265 decoding. It is built for cameras running OpenIPC firmware and works on phones, tablets, TVs, set-top boxes and car devices.
- Video: H.264/H.265 via MediaCodec, MJPEG over RTSP and HTTP; automatic decoder recovery
- Audio: AAC, Opus, G.711, L16
- Views: one camera, or multi-view with up to 8 cameras plus a camera that pushes RTP, decoding adapted to what the device can do
- Network: RTSP over TCP, UDP (Auto falls back to TCP) or multicast, RTP pushed by the camera (Majestic
outgoing), Basic and Digest authentication, automatic reconnection - More: Android TV remote, zoom, camera web interface, URLs stored encrypted, a debug page on port 8085
Ready-to-install builds are in the one release, latest, titled Decoder <version>. The file names carry no version, so these links never change:
| File | What it is | Permanent link |
|---|---|---|
decoder-v2.apk |
Current version, recommended | https://github.com/OpenIPC/decoder/releases/latest/download/decoder-v2.apk |
decoder.apk |
Legacy version from the basic branch |
https://github.com/OpenIPC/decoder/releases/latest/download/decoder.apk |
Every build is replaced in latest by the next one. Development is continuous, so there are no releases per version; every new v2 version is also posted as its APK, with the commit, to the OpenIPC Telegram channel (our channels).
The change history of every version is in CHANGELOG.md.
A beta channel is available on Google Play. To join it, send your e-mail through the OpenIPC Telegram channels.
- Android 5.0 (API 21) or higher
- An IP camera with RTSP or HTTP MJPEG, or one that pushes RTP over UDP (OpenIPC Majestic
outgoing) - Google services (GAPPS) are not required. WebUI needs a working system WebView (#15)
- Install the APK from the latest release and launch the app.
- Tap the screen, or press OK on a remote, to open the menu.
- Choose a camera number (1–8), then press Settings and enter the camera URL:
Under the URL you can choose the transport; Auto (UDP, falling back to TCP) is the default for a new slot. Below it, Turn turns the picture of a camera mounted sideways or upside down, and Mirror flips it left to right. Other URL types: Transports.
rtsp://username:password@ip_address:554/stream=0 - Press Save. The app connects straight away and reconnects automatically if the stream drops.
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]
[ Settings | WebUI | Grid | Slides ]
[ Exit | Reset | Debug | UDP ]
| Input | Action |
|---|---|
| Tap / OK | Open or close the menu |
| 1–8 | Camera slot; the number's colour shows the connection quality |
| Grid / Slides | Multi-view or one camera / every frame or key frames only |
| Debug / UDP | Text in the multi-view cells / the camera that pushes RTP to port 5600 |
| Pinch, double tap | Zoom and pan, reset the zoom (single view) |
| Long press | Screenshot (single view) / play this cell's sound (multi-view) |
Every item, the remote, sharing a URL from another app and Reset: Usage.
For a box that only shows cameras, the app can open by itself after the device starts. Use the device's own autorun first, where its app list has one (the Menu key on the Decoder tile → AUTORUN). Otherwise turn on Start on boot in Settings; Android 10 and newer also need the permission to draw over other apps, and the app shows how to give it. Details: Start on boot.
Important
Each item has an issue — comments, test results and pull requests are welcome.
- RTSP multicast needs Android 8.0+ and a server that offers it; OpenIPC cameras do not — #69
- G.726 audio and MP4A-LATM with in-band configuration (
cpresent=1) are not supported. OpenIPC Majestic does not use them, and cameras that offer G.726 can usually send G.711 or AAC instead — #14 - MJPEG is decoded in software on devices without a usable JPEG decoder (the AG-216 lists one but cannot create it) — #132
- The video decoder of the AG-216 can stop responding until the device is restarted: frames arrive, none is decoded; the app says so on the screen and on the debug page — #145
- Credentials are sent in clear text over plain RTSP/HTTP (Basic auth unless the camera asks for Digest); RTSPS is not supported and not planned — #16
- Screenshots and the debug snapshot need Android 7.0+
Known bugs are tracked separately under the bug label.
| Document | Contents |
|---|---|
| Usage | menu, gestures and keys, remote control, multi-view, Slides, the U cell, WebUI, sharing a URL from another app, screenshots, Reset |
| Transports | URL formats and options: RTSP over TCP/UDP/Auto/multicast, udp:// push (Majestic outgoing), HTTP MJPEG; codecs, authentication, what the servers support |
| Debug | debug page on port 8085, /stats.json field reference, /log, snapshots, what to send with a bug report |
| Architecture | data path, classes, threads, the decode planner, SurfaceView rendering, repository layout |
| Testing and releases | branches, CI, unit tests, versions and releases, branch builds, mapping.txt, building locally |
| Security | credential store, debug server (LAN only), log redaction, no encryption on the network |
| Devices | verified and not working devices, hardware decoder notes, device and camera reports |
| Drones and Wi‑Fi toys | how toys stream, FLOW-UFO, KY UFO and Jieli drones, what to try with an unknown toy, what to send |
The change history is the merged pull requests and the commits of v2.
- Questions and bug reports: GitHub Issues
- Tested the app on a device or a camera? Please send a Device report or a Camera report
- OpenIPC: openipc.org
The Prosperity Public License 3.0.0: free for noncommercial use, with a 30-day trial for commercial use. See LICENSE.md for the full terms.






