V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MissTang
V2EX  ›  问与答

好奇问一下 scrcpy 是如何做到 p2p 远程投屏的?

  •  
  •   MissTang · 2024-07-30 16:06:18 +08:00 · 2020 次点击
    这是一个创建于 418 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不是广告,就是想了解到底是怎么实现的

    有没有类似的开源代码 测了一下确实可以 把安卓设备跨网投屏,还可以操作 用的是 scrcpy

    laixi.app 应该是用易语言写的?

    laixi

    20 条回复    2024-09-15 11:21:57 +08:00
    MissTang
        1
    MissTang  
    OP
       2024-07-30 16:10:12 +08:00
    想用类似这个技术来做云手机出租
    AoEiuV020JP
        2
    AoEiuV020JP  
       2024-07-30 16:36:08 +08:00
    scrcpy 本身就是开源的,
    https://github.com/Genymobile/scrcpy
    dsgvsn
        3
    dsgvsn  
       2024-07-30 16:48:27 +08:00
    只要有 root ,让 adb 监听某个端口,然后内网穿透或者 ipv6 之类的就可以了
    MissTang
        4
    MissTang  
    OP
       2024-07-30 16:58:44 +08:00
    他这个不需要 root 插上数据线就可以
    所以 应该是修改了 scrcpy 添加上了打洞?
    tool2dx
        5
    tool2dx  
       2024-07-30 16:59:07 +08:00
    scrcpy 是用 adb 协议推了一个服务端 jar 到手机上运行,不断的抓屏打包成 H264/H265 ,通过 adb 协议发回到电脑。

    但其实代码不复杂,大部分国内厂商都魔改过,去掉了 adb 协议,直接走 tcp 。这样手机都不用开 adb 。
    MissTang
        6
    MissTang  
    OP
       2024-07-30 16:59:21 +08:00
    @AoEiuV020JP 是的 开源的 但是他仅限于本机 USB 连接或者同一个局域网
    MissTang
        7
    MissTang  
    OP
       2024-07-30 17:00:33 +08:00
    @tool2dx 连 ADB 都不需要打开吗? 那如何把这个 jar 推送到手机运行
    zbinlin
        8
    zbinlin  
       2024-07-30 17:04:24 +08:00
    我自己用,Wireguard 组网,手机 `adb tcp ip 5555`,在电脑上先用 `adb connect` 连上,然后使用 scrcpy 操作。
    MissTang
        9
    MissTang  
    OP
       2024-07-30 17:06:27 +08:00
    @zbinlin 我是想做个 p2p 方案 用于 云手机出租业务
    他这个 2 端都没有组网 两端只需要安装他的软件就可以
    想找找类似的开源项目看看
    tool2dx
        10
    tool2dx  
       2024-07-30 17:09:41 +08:00
    @MissTang adb 推送一次 scrcpy-server.jar 就可以了,github 有魔改的版本是让你自己复制 jar 并运行。

    官方视频流都走 adb 协议,不是很合理。最好还是走 tcp 。
    MissTang
        11
    MissTang  
    OP
       2024-07-30 17:11:16 +08:00
    @tool2dx 也就是说 还是需要 USB 调试权限,先推送一次 然后再关闭 USB 调试
    但是 如果关闭 USB 调试 那会自动结束掉 scrcpy-server.jar 的进程吧?
    zbinlin
        12
    zbinlin  
       2024-07-30 17:11:37 +08:00
    @MissTang 两端安他的软件不也类似组网的
    MissTang
        13
    MissTang  
    OP
       2024-07-30 17:15:35 +08:00
    @zbinlin 安装目录下看到了 kcp.dll
    应该是 UDP 打洞了
    LLaMA2
        14
    LLaMA2  
       2024-07-30 17:36:32 +08:00
    不需要 root,手机用数据线插电脑

    scrcpy 可以直接使用 adb 连接到手机

    adb 本身与可以使用 tcp 连接

    usb 接口又可以使用网络 usb 完成映射
    kimzn33251
        15
    kimzn33251  
       2024-07-31 11:00:31 +08:00
    “把安卓设备跨网投屏,还可以操作 用的是 scrcpy”
    怎么确定是用的 scrcpy ?有什么痕迹么
    非 root 方案就是录屏加推流,touch 事件再开个通道传输
    云手机方案现在很成熟了,直接上机箱的
    MissTang
        16
    MissTang  
    OP
       2024-07-31 16:13:13 +08:00
    @kimzn33251 是 scrcpy 因为安卓进程列表里有 scrcpy 的包名
    MissTang
        17
    MissTang  
    OP
       2024-07-31 16:14:06 +08:00
    @kimzn33251 录屏的话,会容易被杀后台吧
    cd605426287
        18
    cd605426287  
       2024-09-13 13:57:55 +08:00
    @MissTang scrcpy 启动的是有 adb 权限的进程,抓的是 surface 的内容,不会被杀
    MissTang
        19
    MissTang  
    OP
       2024-09-14 18:33:45 +08:00
    @cd605426287 通过 ADB 启动了 scrcpy 后
    再关闭 USB 调试功能
    scrcpy 还会处于运行状态吗?
    cd605426287
        20
    cd605426287  
       2024-09-15 11:21:57 +08:00
    @MissTang 不行
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5507 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:54 · PVG 10:54 · LAX 19:54 · JFK 22:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.