Turn your Android device into a network camera viewer with go2rtc integration and HTTP API for Home Assistant integration. The APK in Releases is generated by Github from the sourcecode in this repository.
Android 14 introduces enhanced ADB security which disables and randomises the port used after sleep/reboot, breaking my automation setup. While Auto ADB Enable offers a workaround, Stream Viewer reduces ADB dependency with web-based configuration and REST API control.
Part of an ADB-free ecosystem:
- Auto ADB Enable - Temporary workaround
- Display Launcher - ADB-free app launching with intent extras
- Android Stream Viewer (this app) - ADB-free camera display
How they work together: Display Launcher launches Stream Viewer with a camera name passed as an intent extra (e.g., camera_name:FRONTDOOR). Stream Viewer loads its web-configured go2rtc URL and immediately displays the requested camera. All configuration happens through web interfaces—no ADB required. This approach is more reliable than ADB (no timeouts, persistent configuration) and integrates seamlessly with Home Assistant.
Caution
This application has NO built-in authentication or encryption. Much like go2rtc itself the web server runs on port 9090 with unrestricted access to anyone who can reach the device on your network.
❌ DO NOT expose this app directly to the internet
❌ DO NOT port forward 9090 to the internet
❌ DO NOT use on untrusted networks (public WiFi, etc.)
❌ DO NOT assume any built-in security exists
Important
- Automatically indexes cameras from specified go2rtc server
- WebRTC & MSE protocol support
- Camera tour mode (cycle through enabled cameras)
- Burn-in protection (for displays)
- Web configuration interface
- Home Assistant integration via API
- Dynamic camera list API endpoint
- Intent-based camera launching - Launch specific cameras directly via Android intents from Home Assistant or other apps
- Persistent go2rtc server configuration
GET /api/cameras- Get all cameras (full JSON)GET /api/camera-names- Get camera names as comma-separated listPOST /api/cameras- Save camerasPOST /api/camera/{id}/toggle- Toggle camera enabled/disabled
POST /api/config- Configure streamGET /api/status- Get current stream status
POST /api/tour/start- Start camera tourPOST /api/tour/stop- Stop camera tourGET /api/tour/status- Get tour status
POST /api/discover- Discover cameras from go2rtcPOST /api/save-server-url- Save go2rtc server URLPOST /api/default- Set default cameraGET /api/default- Get default camera
GET /api/logs- Get server logsGET /api/burn-in/status- Get burn-in protection statusPOST /api/burn-in/toggle- Toggle burn-in protection
The app supports launching with specific cameras via Android intents. This enables direct camera selection from Home Assistant, automation tools, or other Android apps.
Action: android.intent.action.MAIN
Package: com.tpn.streamviewer
Extra: camera_name (String) - The camera name to load
adb shell am start -n com.tpn.streamviewer/.MainActivity --es camera_name "FRONTDOOR"See the Home Assistant integration guide for automation examples.
See home-assistant/README.md for complete setup instructions including intent-based automation examples.
- Download the APK from Releases
- Enable "Install from Unknown Sources" on your Android device
- Install APK via ADB, file manager, or browser
- Configure go2rtc server URL in web interface
(Or build from source)
Tested on Amazon Echo Show 5 & Chromecast with Google TV 4K
Some devices may struggle with WebRTC. In which case use a lower bitrate/framerate/resolution or switch to MSE.
./gradlew assembleReleaseDeveloped with AI assistance. Uses go2rtc for stream handling and NanoHTTPD for the embedded web server.

