Scrcpy 2.0 Android screen mirroring and control utility for Windows, Linux and macOS has just been released with support for audio forwarding that allows audio to be played on the computer/laptop, instead of the smartphone, at least for mobile devices with Android 11 or greater.
We first reported on Scrcpy open-source utility in 2018, and at that time it worked relatively well in Ubuntu 16.04, but required quite a few steps for installation, and it got delayed from time to time. I was still able to use the mouse and keyboard to operate my phone, text, chat, surf the web, play games, switch between landscape and portrait mode, and so on. Five years later Scrcp 2.0 has been released, the installation is much easier and new features have been implemented.
Scrcpy 2.0 Highlights:
- Quality – 1920 × 1080 or higher
- Performance – 30 ~ 120 fps depending on the device
- Latency – 35~70ms
- Startup time: ~1 second to display the first image
- Nothing needs to be installed on the Android device as it depends on adb USB or WiFi debugging mode
- No account, no ads, no internet required
- Audio forwarding for Android 11 and above
- Video and audio recording
- Mirroring with the screen of the Android device turned off
- Copy/paste in both directions
- Configurable quality
- Android device only used as a webcam in Linux via V4L2
- Physical Keyboard/Mouse Simulation (HID)
- OTG mode
So I decided to give another one in Ubuntu 22.04. Scrcpy can be easily installed with apt or snap, but that’s older versions 1.2.1 and 1.2.5, so I used the method to install the latest version which isn’t too complicated. We need to install some dependencies first:
sudo apt install ffmpeg libsdl2-2.0-0 adb wget\gcc git pkg-config meson ninja-build libsdl2-dev\libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev\libswresample-dev libusb-1.0-0 libusb-1.0- 0-dev
sudo suitable to install ffmpeg libsdl2–2.0–0 adjective wget \
gcc crazy pkg–configuration meson ninja–to build libsdl2–developer \
libavcodec–developer libav device–developer libavformat–developer libavutil–developer \
libswresample–developer libusb–1.0–0 libusb–1.0–0–developer
Then we can check out the code and run the install_release.sh script:
git clone https://github.com/Genymobile/scrcpy cd scrcpy ./install_release.sh
crazy clone https:https://github.com/Genymobile/scrcpy
You also need to make sure that Developer Options and USB debugging are enabled on your smartphone. I thought wifi debugging would work out of the box, but apparently now it only works on android 11 or higher (although I use wifi adb in older android versions before), but my phone is running android 10 so i just connected a USB cable to my phone, and it works like a charm. I was able to surf the web, play a game, start a video call in LINE, watch a YouTube video in NewPipe in a maximized window (not full screen), display the Yahoo Finance app to display stock quotes, and so on. I could only hear audio from my phone because it only runs Android 10.
I also tested some of the new features such as copy/paste. I was able to select text and copy some text in Firefox Android and copy it to Gedit with Ctrl+V. It’s bi-directional, so I was able to copy some text (a URL) in Firefox in Ubuntu and copy with Ctrl+V in Android.
I also tried using my phone as a webcam following the V4L2 instructions, but this part failed due to a codec problem:
jaufranc@cnx-laptop-4:~$ scrcpy –v4l2-sink=/dev/video2 –no-display scrcpy 2.0
[server] INFO: Device: HUAWEI STK-L22 (Android 10) INFO: v4l2 sink started to device: /dev/video2
[server] ERROR: Encoding Error: android.media.MediaCodec$CodecException: Error 0xfffffc0e WARNING: Device Disconnected
[server] ERROR: Thread exception Thread[main,5,main]android.media.MediaCodec$CodecException: Error 0xfffffc0e on android.media.MediaCodec.native_configure(Native Method) on android.media.MediaCodec.configure(MediaCodec.java:2023) on android.media.MediaCodec.configure(MediaCodec.java: 1951) at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:84) at com.genymobile.scrcpy.Server.scrcpy(Server.java:133) at com.genymobile.scrcpy.Server.main(Server.java :381) at com.android.internal.os.RuntimeInit.nativeFinishInit (own method) at com.android.internal.os.RuntimeInit.main (RuntimeInit.java:359)
jaufranc@cnx–Laptop–4:~$ scrcpy —v4l2–sink=/developer/video2 —No–display
scrcpy 2.0 <https:https://github.com/Genymobile/scrcpy>
INFO: Video orientation is locked for v4l2 sink. To see —key lock–video–orientation.
INFO: No display And No intake: sound handicapped
/usr/local/part/scrcpy/scrcpy–server: 1 file pushed. 4.0 MB/S (52867 bytes in 0.013s)
[server] INFO: Device: HUAWEI STK–L22 (Android 10)
INFO: v4l2 sink started Unpleasant device: /developer/video2
[server] WRONG: encryption wrong: android.media.MediaCodec$CodecException: Wrong 0xffffc0e
WARN: Device disconnected
[server] WRONG: Exception on wire Thread[main,5,main]
android.media.MediaCodec$CodecException: Wrong 0xffffc0e
bee android.media.MediaCodec.native_configure(Original Method)
bee com.genemobile.scrcpy.Screen Encoder.stream screen(Screen Encoder.Java:84)
bee com.android.internal.ox.RuntimeInit.native FinishInit(Original Method)
It can be very useful for older smartphones that can be converted into webcams. Note that scrcpy also works with Raspberry Pi, and probably with other Arm Linux SBCs, so there could be some interesting use cases.
Nevertheless, Scrcpy 2.0 is quite a useful tool that is easy to use and well documented. The source code and detailed instructions can be found on GitHub.
Jean-Luc started CNX Software in 2010 as a part-time venture before quitting his job as a software engineering manager and later began writing daily news and reviews full-time in 2011.