Skip to content
OpenIPCPublic

About

Miniature and universal H.264 and H.265 decoder for Android devices

Topics

Resources

Code of conduct

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Latest commit

 

History

656 Commits

Folders and files

Repository files navigation

OpenIPC logo

OpenIPC Decoder

English | Русский | 简体中文

Build Release License Platform

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

Multi-view with eight cameras and the menu

Single view right after connecting: transport, codecs and bitrate

The menu on a phone WebUI on a phone: the page scrolls the field above the keyboard

Debug page: snapshot with each cell's text
/stats.json /log

Download

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.

Requirements

  • 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)

Quick start

  1. Install the APK from the latest release and launch the app.
  2. Tap the screen, or press OK on a remote, to open the menu.
  3. Choose a camera number (1–8), then press Settings and enter the camera URL:
    rtsp://username:password@ip_address:554/stream=0
    
    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.
  4. Press Save. The app connects straight away and reconnects automatically if the stream drops.

Controls

[ 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.

Known limitations

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.

Documentation

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.

Support

Telegram

License

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.

About

Miniature and universal H.264 and H.265 decoder for Android devices

Topics

Resources

Code of conduct

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Contributors

Languages