Web client for Genymobile/scrcpy and more.
Browser must support the following technologies:
- WebSockets
- Media Source Extensions and h264 decoding;
- WebWorkers
- WebAssembly
Server:
- Node.js v10+
- node-gyp (installation)
adb
executable must be available in the PATH environment variable
Device:
- Android 5.0+ (API 21+)
- Enabled adb debugging
- On some devices, you also need to enable an additional option to control it using keyboard and mouse.
Make sure you have installed node.js, node-gyp and build tools
git clone https://github.com/NetrisTV/ws-scrcpy.git
cd ws-scrcpy
## For stable version find latest tag and switch to it:
# git tag -l
# git checkout vX.Y.Z
npm install
npm start
The modified version of Genymobile/scrcpy used to stream H264-video, which then decoded by one of included decoders:
- MsePlayer, formerly "native" (code). Based on
xevokk/h264-converter. TL;DR. HTML5 Video.
Requires Media Source API andvideo/mp4; codecs="avc1.42E01E"
support. Creates mp4 containers from NALU, received from a device, then feeds them to MediaSource. In theory, it can use hardware acceleration. - BroadwayPlayer (code). Based on
mbebenita/Broadway and 131/h264-live-player.
Requires WebAssembly and preferably WebGL support. - TinyH264Player (code). Based on
udevbe/tinyh264.
Requires WebAssembly, WebWorkers, WebGL support.
- Touch events (including multi-touch)
- Multi-touch emulation: CTRL to start with center at the center of the screen, SHIFT + CTRL to start with center at the current point
- Capturing keyboard events
- Injecting text (ASCII only)
- Copy to/from device clipboard
- Device "rotation"
Drag & drop an APK file to push it to the /data/local/tmp
directory. You can
install it manually from the included xtermjs/xterm.js terminal
emulator (see below).
Control your device from adb shell
in your browser.
Experimental Feature: is not built by default
Requires ws-qvh available in PATH
.
To control device we use appium/WebDriverAgent. Functionality is limited to:
- Simple touch
- Scroll
- Home button click
Make sure you did properly setup WebDriverAgent.
WebDriverAgent project is located under node_modules/appium-webdriveragent/
.
You can customize project before build by specifying environment variables:
INCLUDE_APPL
- include code for iOS device tracking and controlINCLUDE_GOOG
- include code for Android device tracking and control
Only 1
or true
is considered a positive value, anything else is considered a negative.
Default dist
script in package.json
includes INCLUDE_GOOG=1
.
i.e. If you want to build a "full" version you need to run:
INCLUDE_APPL=1 INCLUDE_GOOG=1 npm run dist:prod
You can specify a path to a configuration file in WS_SCRCPY_CONFIG
environment variable.
Configuration file format: source.
Parameters explanation: TBD.
- The server on the Android Emulator listens on the internal interface and not
available from the outside. Select
proxy over adb
from the list of interfaces. - TinyH264Player may fail to start, try to reload the page.
- MsePlayer reports too many dropped frames in quality statistics: needs further investigation.
- On Safari file upload does not show progress (it works in one piece).
Be advised and keep in mind:
- There is no encryption between browser and node.js server (plain HTTP).
- There is no encryption between browser and WebSocket server (plain WS).
- There is no authorization on any level.
- The modified version of scrcpy with integrated WebSocket server is listening for connections on all network interfaces.
- The modified version of scrcpy will keep running after the last client disconnected.
- Genymobile/scrcpy
- xevokk/h264-converter
- 131/h264-live-player
- mbebenita/Broadway
- DeviceFarmer/adbkit
- xtermjs/xterm.js
- udevbe/tinyh264
Currently, support of WebSocket protocol added to v1.17 of scrcpy