您尚未登录。

楼主 #1 2019-08-02 21:34:39

checkout
会员
注册时间: 2018-11-09
已发帖子: 173
积分: 168

投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

本帖子旨在分享本人之前在荔枝派zero板子上移植的投屏软件:scrcpy。
scrcpy投屏的分辨率与流畅度受限于两个方面:1.图形渲染  2.解码(h264)
源项目简介:https://github.com/Genymobile/scrcpy.git
大致原理:scrcpy使用adb push一个jar包到Android手机,手机作为server抓取手机屏幕并编码压缩,开发板作为client通过adb连接server;开发板接受到h264码流后解码、渲染显示。此外,client端还可以接受本地键盘和鼠标命令控制Android手机。
硬件验证:licheepi zero开发板
软件:解码与渲染都是软件方式,效果不必期待会有多好。不过,可以拿到有GPU的树莓派上跑,效果应该不错。
scrcpy需要用到adb(不是adbd!!!,所以,你懂的:p要先移植它

先立贴,放放视频,看看是啥东东:

最近编辑记录 checkout (2019-08-02 21:36:25)

离线

#2 2019-08-02 23:15:49

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,138
积分: 1090.5

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

牛!

离线

#3 2019-08-02 23:40:18

jimmy
会员
注册时间: 2017-10-29
已发帖子: 316
积分: 315

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

牛叉牛叉, V3s USB 是不是要把  adb 协议弄进去, 让 V3s 做 adb 客户端, 相当于 windows 的 adb shell ?

离线

#4 2019-08-03 09:46:42

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

牛得一塌糊涂!
是不是也可以用wifi来搞?类似wifi display那样...

离线

#5 2019-08-06 08:54:59

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

这个很好玩啊,学习了

离线

#6 2019-08-06 10:49:45

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,350
积分: 9202

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

Linux 下编译方法:
https://github.com/Genymobile/scrcpy/blob/master/BUILD.md#prebuilt-server


2019-08-06_104601.png

adb -L tcp:5037 fork-server server --reply-fd 268

adb shell CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / com.genymobile.scrcpy.Server 0 8000000 false - true true

试了一下 scrcpy Windows 64bit 版本,小巧极速, 此处下载 scrcpy-win64-v1.10.zip

貌似通过 adb 注入一个 jar文件在 android 上面跑, 执行 h.264 codec 编码,
然后电脑使用 adb 接收,并 h.264 解码?





离线

#7 2019-08-06 18:51:23

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,350
积分: 9202

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

QQ20190806185008.png

QQ20190806185703.png

按照 Linux 下编译方法:
https://github.com/Genymobile/scrcpy/blob/master/BUILD.md#prebuilt-server

Ubuntu 18.04 运行成功.





离线

#8 2019-08-21 09:28:11

firstman
会员
注册时间: 2019-04-06
已发帖子: 279
积分: 279

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

楼主大神, 我还是接着到这里来问你合适一点

https://whycan.cn/t_2760.html#p22646

checkout 说:

你首先要分清adb和adbd的区别。adbd是手机里面跑的那种,需要支持gadget,adb是主机模式下跑的,用来连接手机

firstman 说:

https://whycan.cn/files/members/1574/QQ20190820223450.png

弄了一个 adb 执行程序进去, 然而, 并不能连到我的小米手机.

总觉得还有一个协议没有勾选.

如果我的 f1c100s 里面跑一个 adb, 用来连接手机(手机里面应该跑的是 adbd???)
我需要做哪些操作, 需要在 make menuconfig 里面勾选什么协议吗?

离线

楼主 #9 2019-08-21 09:49:29

checkout
会员
注册时间: 2018-11-09
已发帖子: 173
积分: 168

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

用来连接手机的话,只需要支持USB host模式就行,不需要修改其他东东。插上手机,运行adb,再执行adb devices可以看正不正常

firstman 说:

楼主大神, 我还是接着到这里来问你合适一点

https://whycan.cn/t_2760.html#p22646

checkout 说:

你首先要分清adb和adbd的区别。adbd是手机里面跑的那种,需要支持gadget,adb是主机模式下跑的,用来连接手机

firstman 说:

https://whycan.cn/files/members/1574/QQ20190820223450.png

弄了一个 adb 执行程序进去, 然而, 并不能连到我的小米手机.

总觉得还有一个协议没有勾选.

如果我的 f1c100s 里面跑一个 adb, 用来连接手机(手机里面应该跑的是 adbd???)
我需要做哪些操作, 需要在 make menuconfig 里面勾选什么协议吗?

离线

#10 2019-08-21 10:22:18

超级萌新
会员
注册时间: 2018-05-04
已发帖子: 408
积分: 407

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

翻了一下 adb 代码,使用了 libusb,这样在应用层直接驱动了,看起来不需要添加什么协议了,刚刚试了一下f1c100s 插我的手机,居然usb出错。


[  504.633108] usb 1-1: new high-speed USB device number 6 using musb-hdrc
[  505.223109] usb 1-1: device not accepting address 6, error -71
[  505.373116] usb 1-1: new high-speed USB device number 7 using musb-hdrc
[  505.523120] usb 1-1: device descriptor read/64, error -71
[  505.793094] usb 1-1: device descriptor read/64, error -71
[  505.913234] usb usb1-port1: attempt power cycle
[  506.403107] usb 1-1: new high-speed USB device number 8 using musb-hdrc
[  506.843098] usb 1-1: device not accepting address 8, error -71
[  506.993120] usb 1-1: new high-speed USB device number 9 using musb-hdrc
[  507.433081] usb 1-1: device not accepting address 9, error -71
[  507.439082] usb usb1-port1: unable to enumerate USB device

回去换条线或者换个手机试一试。

离线

#11 2019-08-21 12:19:36

超级萌新
会员
注册时间: 2018-05-04
已发帖子: 408
积分: 407

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

# 
# 
# [   97.063258] usb 1-1: new high-speed USB device number 4 using musb-hdrc

# lsusb
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 004: ID 2717:ff08
# 
# 
# adb devices
List of devices attached 

# 

换了一条线 USB 连接貌似可以了, 但是 adb devices 什么都没有  ;(

离线

楼主 #12 2019-08-21 12:33:11

checkout
会员
注册时间: 2018-11-09
已发帖子: 173
积分: 168

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

手机开调试模式了没?

超级萌新 说:
# 
# 
# [   97.063258] usb 1-1: new high-speed USB device number 4 using musb-hdrc

# lsusb
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 004: ID 2717:ff08
# 
# 
# adb devices
List of devices attached 

# 

换了一条线 USB 连接貌似可以了, 但是 adb devices 什么都没有  ;(

离线

#13 2019-08-21 13:34:01

超级萌新
会员
注册时间: 2018-05-04
已发帖子: 408
积分: 407

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

开了, 这个手机在 Windows 和 虚拟机Ubuntu 的 adb shell 都正常。

两个手机MI5/RedMI Note7, 两根原装的USB线, 都是一模一样的情况,

lsusb 都可以显示USB设备,内核也没有报错误,就是 adb devices 啥也没有。

最近编辑记录 超级萌新 (2019-08-21 13:55:56)

离线

#14 2019-08-21 14:18:34

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,350
积分: 9202

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

超级萌新 说:

开了, 这个手机在 Windows 和 虚拟机Ubuntu 的 adb shell 都正常。

两个手机MI5/RedMI Note7, 两根原装的USB线, 都是一模一样的情况,

lsusb 都可以显示USB设备,内核也没有报错误,就是 adb devices 啥也没有。

翻了一下邮箱, 我当时搞君正X1000, 参考这篇文章, 可以搞定,
https://blog.csdn.net/u010340178/article/details/72726205

首先检查 adb 相关文件:

# find / |grep adb
/tmp/adb.log
/usr/bin/adbd
/usr/bin/adb
/root/.android/adbkey.pub
/root/.android/adbkey

然后建立 /root/.android/adb_usb.ini
文件的内容是你的USB VID

0x2717

然后先kill server, 然后就正常了:

adb kill-server
adb devices
adb shell





离线

#15 2019-08-21 14:21:36

超级萌新
会员
注册时间: 2018-05-04
已发帖子: 408
积分: 407

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

2019-08-21_142007.png

感谢 @晕哥 @checkout

终于搞定了, 今天终于可以早点下班了 ^_^

离线

#16 2019-08-21 16:56:10

九霄云外
会员
注册时间: 2019-01-09
已发帖子: 100
积分: 100

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

mark, 牛逼






小薏科技------全志F系列芯片供应、方案开发、技术支持 QQ:610943940

离线

#17 2019-09-12 16:45:41

我思故我在
会员
注册时间: 2019-09-03
已发帖子: 244
积分: 243.5

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

还有这种玩法啊, 顶起顶起!


--------------------------
试了一下, 玩摄像头, 有点丢帧, 越久越滞后。

最近编辑记录 我思故我在 (2019-09-12 16:52:05)

离线

#18 2019-10-17 09:20:32

forstk
会员
注册时间: 2019-10-15
已发帖子: 15
积分: 5.5

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

厉害厉害!

离线

#19 2019-10-17 09:47:41

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,350
积分: 9202

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

这个好贴已经收录到 精华汇总





离线

#20 2019-11-01 12:01:09

lanjackg2003
会员
注册时间: 2019-06-12
已发帖子: 42
积分: 42

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

厉害,学习了,到时候试试

离线

#21 2019-11-01 14:11:17

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

心疼自己,没看懂投屏怎么玩的,应该是需要在板子上运行scrcpy吧。。。


萌新大佬,你的nano能投屏吗

先按你的试试,我用https://whycan.cn/t_2794.html里面晕哥提供的tf卡bin,硬件是荔枝派nano.

检测不到手机

# adb devices
error: device offline
# clear
# lsusb
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 2d95:6007
# cat /root/.android/adb_usb.ini
0x2D95
#
# adb devices
error: device offline
#

网上搜error: device offline。说要执行

1、adb kill-server

2、adb start-server

3、adb remount

实测还是不行:

#
# adb kill-server
* server not running *
# adb start-server
# adb remount
error: device offline
#
# adb devices
error: device offline
#

你的nano是自己编译固件么/


超级萌新 说:

https://whycan.cn/files/members/878/2019-08-21_142007.png

感谢 @晕哥 @checkout

终于搞定了, 今天终于可以早点下班了 ^_^

离线

#22 2019-11-01 14:13:36

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

这个投屏要玩起来,是下面步骤么?

1. 交叉编译scrcpy,在开发板上运行;
2. 开发板通过OTG线,接手机;
3. 实现投屏?

离线

#23 2019-11-01 14:31:54

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,350
积分: 9202

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

2,1,3 吧

可以跑下4楼的预编译文件, 直观感受一下, 还是挺好玩的。





离线

#24 2019-11-01 14:38:16

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

晕哥,是6楼吧。。。

win10下测试了,很顺利,很好玩啊。


ubtuntu16.04,编译不成功,没体验到,折腾一上午了

---

回头再研究上开发板上怎么玩,感觉只有在板子上跑,才能体会装x的快乐。。。


晕哥 说:

2,1,3 吧

可以跑下4楼的预编译文件, 直观感受一下, 还是挺好玩的。

离线

#25 2019-11-01 14:43:22

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,350
积分: 9202

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

对, 是6楼 ^_^

ubuntu 也不太难。





离线

#26 2020-01-14 15:14:35

cityf
会员
注册时间: 2017-11-03
已发帖子: 195
积分: 195

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

楼主,大神也,又get到新姿势了.

离线

#27 2020-01-14 18:21:13

小智
会员
注册时间: 2019-10-16
已发帖子: 112
积分: 84

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

牛的一塌糊涂

离线

#28 2020-07-19 10:24:36

exculivor
会员
注册时间: 2020-07-19
已发帖子: 2
积分: 2

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

这么流畅的吗?有没有wifi投屏的开源方案?USB还是有限制的

离线

#29 2020-07-23 17:11:07

淡定
会员
注册时间: 2020-07-23
已发帖子: 21
积分: 41

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

有详细点的操作步骤吗?看的云里雾里的,就是感觉很牛

离线

#30 2020-11-27 08:28:36

我就是废物
Moderator
注册时间: 2020-06-22
已发帖子: 2
积分: 2

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

game.jpg



要不要试一试 Qt 版本 的scrpy  ==>

https://github.com/barry-ran/QtScrcpy/blob/master/README_zh.md

离线

#31 2020-11-27 09:38:17

农夫三拳
会员
注册时间: 2020-10-09
已发帖子: 3
积分: 3

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

2020-11-27_093000.png

diff --git a/QtScrcpy/QtScrcpy.pro b/QtScrcpy/QtScrcpy.pro
index 0afdc4e..d0ba2cd 100644
--- a/QtScrcpy/QtScrcpy.pro
+++ b/QtScrcpy/QtScrcpy.pro
@@ -142,7 +142,7 @@ win32 {
     QMAKE_POST_LINK += $$quote($$QMAKE_COPY $$WIN_FFMPEG_SRC $$WIN_DST$$escape_expand(\n\t))
 
     # windows rc file
-    RC_FILE = $$PWD/res/QtScrcpy.rc
+    #RC_FILE = $$PWD/res/QtScrcpy.rc
 }
 
 # ***********************************************************
diff --git a/QtScrcpy/adb/adbprocess.cpp b/QtScrcpy/adb/adbprocess.cpp
index ad14835..7af3685 100644
--- a/QtScrcpy/adb/adbprocess.cpp
+++ b/QtScrcpy/adb/adbprocess.cpp
@@ -1,4 +1,4 @@
-#include <QCoreApplication>
+#include <QCoreApplication>
 #include <QDebug>
 #include <QDir>
 #include <QFileInfo>
@@ -116,9 +116,9 @@ QStringList AdbProcess::getDevicesSerialFromStdOut()
 {
     // get devices serial by adb devices
     QStringList serials;
-    QStringList devicesInfoList = m_standardOutput.split(QRegExp("\r\n|\n"), Qt::SkipEmptyParts);
+    QStringList devicesInfoList = m_standardOutput.split(QRegExp("\r\n|\n"), QString::SkipEmptyParts);
     for (QString deviceInfo : devicesInfoList) {
-        QStringList deviceInfos = deviceInfo.split(QRegExp("\t"), Qt::SkipEmptyParts);
+        QStringList deviceInfos = deviceInfo.split(QRegExp("\t"), QString::SkipEmptyParts);
         if (2 == deviceInfos.count() && 0 == deviceInfos[1].compare("device")) {
             serials << deviceInfos[0];
         }
diff --git a/QtScrcpy/device/controller/inputconvert/inputconvertnormal.cpp b/QtScrcpy/device/controller/inputconvert/inputconvertnormal.cpp
index 63924e1..6362231 100644
--- a/QtScrcpy/device/controller/inputconvert/inputconvertnormal.cpp
+++ b/QtScrcpy/device/controller/inputconvert/inputconvertnormal.cpp
@@ -1,4 +1,4 @@
-#include <cmath>
+#include <cmath>
 
 #include "inputconvertnormal.h"
 
@@ -59,7 +59,7 @@ void InputConvertNormal::wheelEvent(const QWheelEvent *from, const QSize &frameS
     qint32 vScroll = from->angleDelta().y() == 0 ? 0 : from->angleDelta().y() / abs(from->angleDelta().y()) * 2;
 
     // pos
-    QPointF pos = from->position();
+    QPointF pos = from->posF();
     // convert pos
     pos.setX(pos.x() * frameSize.width() / showSize.width());
     pos.setY(pos.y() * frameSize.height() / showSize.height());
diff --git a/QtScrcpy/device/ui/videoform.cpp b/QtScrcpy/device/ui/videoform.cpp
index 36a6ef4..7fb9468 100644
--- a/QtScrcpy/device/ui/videoform.cpp
+++ b/QtScrcpy/device/ui/videoform.cpp
@@ -1,4 +1,4 @@
-#include <QDesktopWidget>
+#include <QDesktopWidget>
 #include <QFileInfo>
 #include <QLabel>
 #include <QMessageBox>
@@ -611,13 +611,13 @@ void VideoForm::mouseDoubleClickEvent(QMouseEvent *event)
 
 void VideoForm::wheelEvent(QWheelEvent *event)
 {
-    if (m_videoWidget->geometry().contains(event->position().toPoint())) {
+    if (m_videoWidget->geometry().contains(event->posF().toPoint())) {
         if (!m_device) {
             return;
         }
-        QPointF pos = m_videoWidget->mapFrom(this, event->position().toPoint());
+        QPointF pos = m_videoWidget->mapFrom(this, event->posF().toPoint());
         QWheelEvent wheelEvent(
-            pos, event->globalPosition(), event->pixelDelta(), event->angleDelta(), event->buttons(), event->modifiers(), event->phase(), event->inverted());
+            pos, event->globalPosF(), event->pixelDelta(), event->angleDelta(), event->buttons(), event->modifiers(), event->phase(), event->inverted());
         emit m_device->wheelEvent(&wheelEvent, m_videoWidget->frameSize(), m_videoWidget->size());
     }
 }
diff --git a/QtScrcpy/dialog.cpp b/QtScrcpy/dialog.cpp
index e5f6827..d143f67 100644
--- a/QtScrcpy/dialog.cpp
+++ b/QtScrcpy/dialog.cpp
@@ -1,4 +1,4 @@
-#include <QDebug>
+#include <QDebug>
 #include <QFile>
 #include <QFileDialog>
 #include <QKeyEvent>
@@ -137,7 +137,7 @@ void Dialog::execAdbCmd()
     }
     QString cmd = ui->adbCommandEdt->text().trimmed();
     outLog("adb " + cmd, false);
-    m_adb.execute(ui->serialBox->currentText().trimmed(), cmd.split(" ", Qt::SkipEmptyParts));
+    m_adb.execute(ui->serialBox->currentText().trimmed(), cmd.split(" ", QString::SkipEmptyParts));
 }
 
 QString Dialog::getGameScript(const QString &fileName)

Qt5.12.3 mingw64 可以编译成功 ^_^

离线

#32 2020-11-28 08:34:18

smartcar
会员
注册时间: 2018-02-19
已发帖子: 735
积分: 735

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

奇怪,我也编译运行成功,但是无论用哪个脚本,电脑按键事件都不能触发屏幕的点击和手势动作呢?

离线

#33 2020-11-28 08:49:17

孤星泪
会员
注册时间: 2020-03-18
已发帖子: 235
积分: 231

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

smartcar 说:

奇怪,我也编译运行成功,但是无论用哪个脚本,电脑按键事件都不能触发屏幕的点击和手势动作呢?

看软件提示,按 ~ 可以切换

离线

#34 2021-09-10 17:33:49

Timaker
会员
注册时间: 2020-05-18
已发帖子: 65
积分: 43.5

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

没有电脑怎么开启手机的adb?

离线

#35 2021-11-03 21:26:53

seaven
会员
注册时间: 2021-06-07
已发帖子: 0
积分: 0

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

该评论内容与本帖子无关,鼓励各位坑友积极发言讨论与帖子有关的内容!

离线

  • 不通过:其他

#36 2022-12-16 07:43:32

astankvai
会员
注册时间: 2021-02-23
已发帖子: 62
积分: 62

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

这个工具不错啊,  神器啊。

离线

#37 2022-12-16 09:38:21

liusn
会员
注册时间: 2022-12-16
已发帖子: 3
积分: 3

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

apt 库里没有么?

离线

#38 2022-12-16 17:45:48

tango_zhu
会员
注册时间: 2018-04-12
已发帖子: 121
积分: 3

Re: 投屏软件scrcpy在Linux上的移植(porting scrcpy to linux)

这个v3s 怎么交叉编译?需要依赖哪些库

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn