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 and basic version is also posted with its 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. 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.
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.






