Skip to content

Latest commit

 

History

History
195 lines (139 loc) · 11.2 KB

File metadata and controls

195 lines (139 loc) · 11.2 KB

ScreenStream

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.

Get it on Google Play Get it on F-Droid

Project support

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

Stream modes

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 (MJPEG)

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

Local mode main screen  Local mode activity and connected clients  Local mode information dialog

Local mode general settings  Local mode image settings  Local mode security settings

Local mode advanced settings

Global mode (WebRTC)

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

Global mode main screen  Global mode information dialog  Global mode audio settings

RTSP mode

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

RTSP mode main screen  RTSP mode information dialog  RTSP mode server settings

RTSP mode video settings  RTSP mode audio settings

Contribution

To contribute a translation, translate the following five files:

  1. app/src/main/res/values/strings.xml
  2. common/src/main/res/values/strings.xml
  3. mjpeg/src/main/res/values/strings.xml
  4. webrtc/src/main/res/values/strings.xml
  5. 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.

Developer

Developed by Dmytro Kryvoruchko. If you have any issues or ideas, feel free to contact me.

Privacy and Terms

App Privacy Policy and Terms & Conditions

License

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.