ScreenStream is an open-source Android application for streaming your device screen and audio. Use Local mode (MJPEG) or Global mode (WebRTC) to view the stream in a web browser, or use RTSP mode with a compatible RTSP client, server, or player.
The Google Play version supports all modes: Global mode (WebRTC), Local mode (MJPEG), and RTSP mode, with ads included.
F-Droid versions are ad-free and support only Local mode (MJPEG) and RTSP mode.
If ScreenStream is useful to you, you can support its continued development using any of the options below.
Preferred (Tether Wallet / Tether.me): dmkr0@tether.me
This human-readable Tether.me address is the simplest option for Tether Wallet users.
For direct on-chain transfers:
USD₮ / USA₮ (Ethereum / ERC-20): 0x5bb898c72dd3dD5E7f7A0Ab12854a60374B7c1dA
BTC (on-chain): bc1q8wuv4esej0rdyn2jwkd93v7wvyep7uutzsmlh9
ScreenStream offers three stream modes: Global mode (WebRTC) (available only in the Google Play Store version), Local mode (MJPEG), and RTSP mode. All modes stream the Android device screen, but they function differently. Audio support is available in Global mode (WebRTC) and RTSP mode only. The modes are independent of each other and have different capabilities, restrictions, and customization options.
| Mode | Delivery | Video | Audio | Internet required | Connection model | Security |
|---|---|---|---|---|---|---|
| Local mode (MJPEG) | MJPEG over HTTP | JPEG images | No | No | Built-in HTTP server | Optional 4–6 digit PIN |
| Global mode (WebRTC) | WebRTC | WebRTC video | Microphone / internal audio | Yes | Public signaling service at screenstream.io | End-to-end encryption + password |
| RTSP mode | RTSP/RTP over TCP or UDP | H.264 / H.265 | OPUS / AAC / G.711 | No (server) / Depends (client) | Built-in server (server mode) / External server (client mode) | Client mode supports RTSP auth + RTSPS (TLS) |
In Global mode (WebRTC) and Local mode (MJPEG), the number of clients is not directly limited, but each client uses CPU resources and separate bandwidth.
ScreenStream uses Android's MediaProjection API and requires Android 7.0 or higher.
Warning
-
High traffic on mobile networks: Streaming over 3G/4G/5G/LTE can consume a large amount of data.
-
Streaming delay: Latency depends on the selected mode, device performance, and network conditions. RTSP and WebRTC are generally better suited for lower-latency streaming, while Local mode prioritizes broad browser compatibility.
-
Video playback: Streaming quality depends on the selected mode, resolution, device encoders, available bandwidth, and CPU load.
Local mode uses MJPEG and a built-in HTTP server. It works on a local network without internet, such as Wi-Fi, a device hotspot, USB tethering, or any other network connection between the Android device and the client's browser.
For optimal performance, a fast and stable network connection is recommended due to high traffic and low network delay requirements.
In Local mode, the app processes each frame independently, one by one, enabling additional image transformations such as cropping, resizing, rotating, and more before sending the image to the client's web browser.
The Local mode offers the following functionality:
- Uses MJPEG.
- PIN protection, no encryption.
- Video only, sent as separate images.
- Works on your local network, no internet required.
- Built-in HTTP server.
- Allows resizing by percentage or exact resolution.
- Supports Wi-Fi, mobile networks, IPv4, and IPv6.
- Clients connect in a browser using the app address.
- Highly configurable.
- Each client uses separate bandwidth.
Note
-
Some mobile carriers may block incoming connections to your device. Even if the device has a mobile network IP address, clients may not be able to connect to it directly.
-
Some Wi-Fi networks, particularly public or guest networks, isolate connected devices from each other. In this case, a phone and a client device on the same Wi-Fi network may still be unable to connect directly.
Screenshots
Global mode uses WebRTC and the public ScreenStream signaling service to connect the streaming host (the app) with viewers using the ScreenStream Web Client.
Both the signaling server and web client are open-source and available in the ScreenStreamWeb repository. The hosted web client is available at screenstream.io and works with modern desktop and mobile browsers that support WebRTC.
Global mode offers the following functionality:
- Uses WebRTC technology.
- End-to-end encrypted communication.
- Stream protection with password.
- Supports video, microphone audio, and internal device audio.
- Connect using a unique stream ID and password.
- Requires an internet connection for streaming.
- Each client uses separate internet bandwidth.
Note
Global mode (WebRTC) is available only in the Google Play version.
Screenshots
RTSP mode supports two sub-modes. Server mode (default) hosts the Android device as an RTSP server so compatible players can connect directly. Client mode publishes the stream to an external RTSP media server, such as MediaMTX.
For optimal performance, a fast and stable network connection is recommended due to high traffic and low network delay requirements.
- Uses RTSP/RTP over TCP or UDP.
- Server mode hosts the device as an RTSP server.
- Client mode publishes to a remote RTSP or RTSPS server.
- Supports H.264/H.265 video and OPUS/AAC/G.711 audio, with codec configuration based on device support.
- Server mode adds protocol, interface/address filters, IPv4/IPv6, and port settings.
- Optional ONVIF discovery lets compatible clients find RTSP server streams; H.264 only.
- Requires an RTSP client or player for viewing.
- Tested with VLC media player, FFplay, mpv, and gst-play-1.0 (GStreamer) players.
Note
Client mode requires an RTSP‑capable media server (e.g., MediaMTX).
Screenshots
To contribute a translation, translate the following five files:
- app/src/main/res/values/strings.xml
- common/src/main/res/values/strings.xml
- mjpeg/src/main/res/values/strings.xml
- webrtc/src/main/res/values/strings.xml
- rtsp/src/main/res/values/strings.xml
Keep the same key order and blank-line placement as the English source files, and preserve all formatting placeholders such as %1$s and %1$d.
Please submit a pull request. If that is not possible, you can send the translated files to the developer via e-mail at dkrivoruchko@gmail.com.
Your contribution helps make the application more accessible. Thank you for your efforts.
Developed by Dmytro Kryvoruchko. If you have any issues or ideas, feel free to contact me.
App Privacy Policy and Terms & Conditions
The MIT License (MIT)
Copyright (c) 2016 Dmytro Kryvoruchko
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

















