This project is an attempt to create a peer-to-peer video monitoring system
for Android devices primarily and any other clients implementing the protocol in the future.
Any camera enabled Android device may run as a server (p2pcamera
app)
to accept connections from clients (p2pmonitor
app for Android) and stream media data to them.
Protocol implies a possibility for clients to control server part requesting available features
and managing the camera parameters as if it was local.
The project contains compile-time annotations.
While source code gets built without errors, you may find unresolved method references during source code overview in Android Studio. VS Code Support for these annotations is integrated into supplied lombok-ext.jar
. Check GIT repo for the source code of the lombok extension library
(an evolution of project lombok
- Android server app
- Server: open camera and display preview
- Server: media encoder
- Server: encoded stream transmission
- Android client app
- Client: media stream reception
- Client: media decoder
- Client: show decoded stream
- Protocol: flash management
- Server: SSDP based port mapping over UPnP
- Create app icons
- Add string localizations
- Remaster enums via
@IntDef
or staticbyte
->value maps - Refactor
Message
acquisition viaobtain()
- Create unit tests
- Create heavy load tests
- Client: control frame rotation
- Protocol: capture (high-res) photo on the fly
- Server: stop encoder when last client disconnects
- Server: check ownership of current port mapping before erasing
- Server: detect connection drops/switchovers/IP renewals etc.
- Server: periodic port mapping check and refresh
- Server: fix image freezes on 1st connection / last disconnection on API 25 devices
- Server: fix image turns 90 deg CCW on 1st connection / last disconnection on API 25 devices
- Client: fix video hangup with a corrupted frame displayed on emulator
- Client: fix image out of sync on slow devices
- Client: add media stream watchdog and connection revival
- Authentication and Authorization
- Payload ciphering
- Secure transport layer
- Server: user management preferences
- Server: collect map of cameras to their characteristics
- Server: screen dimming with configurable timeout
- Protocol: choose desired camera
- Protocol: choose camera resolution
- Protocol: choose AF/MF
- Client & Server: color themes
- Client: action icons
- Client & Server: rotate UI controls instead of screen orientation
- Client: server address & login history
- Server: client statistics (address, connection duration, etc.)
- PC client app
- monitoring data saving
- configurable cleanup period
- automatic connection restoring
- reg as a web camera
- OBS client
- Server: work with several cameras to serve different sources to different clients independently
- Server: per-camera client statistics
- Protocol: audio streaming
- Server: choose interface (IP address) to bind to
- Server: choose gateway (external IP address) to forward from
- Migrate to lombok extension library
- Wrap camera server into foreground service