clouduan
V2EX  ›  Android

投屏软件的原理是什么?它为什么比用 adb 快许多?

  •  1
     
  •   clouduan · May 3, 2018 · 33327 views
    This topic created in 2962 days ago, the information mentioned may be changed or developed.

    我试过用 adb 操作手机截图和点击,延迟都挺大的,但是投屏软件的按键几乎可以实现实时响应。

    我觉得投屏软件的底层实现应该还是用的 adb,但是它是如何做到那么快的呢?

    或者其不是靠 adb 实现的,那它的原理是什么呢?

    31 replies    2019-03-17 23:21:20 +08:00
    bfdh
        1
    bfdh  
       May 3, 2018
    mirrorcast、mirrorlink、vnc 了解下?
    blackbbc
        2
    blackbbc  
       May 3, 2018
    想知道,最近在研究手机投射到电脑上吃鸡的东西
    做过 benchmark
    tc games 的延迟在 400ms 左右
    scrcpy 的延迟在 100ms 左右
    目标是降低到 30ms 以内
    youstu
        3
    youstu  
       May 3, 2018
    主要的应该都还是传输延迟吧,chrome 上有个插件,叫 vysor,也是通过 adb 协议进行远程操作,如果是数据线直连,感觉延迟也很小。
    clouduan
        4
    clouduan  
    OP
       May 3, 2018
    @youstu 是的我后来就是用的 vysor...
    xomix
        5
    xomix  
       May 3, 2018
    不是,我最早看到投屏技术的时候应该是 intel 的 widi,当然还有 nvdia 的自带无线网卡的显卡。

    接下来 Linux mac windows 平台上各自衍生出了自己的投屏技术,再接下来 N A 两家显卡公司也做出了自己的对应技术。

    不管这个技术名称叫什么平台在哪里,他都是讲当前系统运行的状态转换成视屏流发送出去的技术。

    那这样就能很快明白为什么他比 adb 快了,adb 是可以在投屏端操作的,因此是双向的,无线投屏则是单向的。
    Hansah
        6
    Hansah  
       May 3, 2018 via iPhone
    那么问题来了,想要把电脑上的操作通过安卓盒子投射到电视上,哪家 APP 最顺畅?
    TestSmirk
        7
    TestSmirk  
       May 3, 2018
    Android Studio 中的 adb 是 1:1 传输,就是说 2k 屏幕的手机截图下来也是 2k.录屏也是,不过录屏可以通过`-size`设置分辨率
    投屏的话一般就是几种协议 DLNA,Miracast,无非就是在 WLAN,上封装的一层.
    楼上说的 vysor 和 airdroid 类似,就是降低分辨率(480X800 或者更低)这种,实现高速无延时.
    busfool
        8
    busfool  
       May 3, 2018
    我也不知道
    我看过 adb 底层的 framebuffer 命令,实现出来比较慢。
    hicdn
        9
    hicdn  
       May 3, 2018
    @siknet 用 chromecast 可以用 chrome 投射桌面,很流畅。
    乐播投屏,同时支持 DLNA 和 AirPlay,Mac OS 可以直接选乐播的 AirPlay 输出图像+声音。
    Hansah
        10
    Hansah  
       May 3, 2018
    @hicdn 乐播蛋疼啊,飞讯 T1 内置了这个,以前还正常,我前天清空了 APP 的数据之后,电脑 DLNA 过去的画面左上角居然有水印!!!四个字:乐播投屏

    疯了,好像还没见别人说过这个,折腾了半天,只能强顶着看完 WW S2E02
    hicdn
        11
    hicdn  
       May 3, 2018
    @siknet 没看到过水印,你卸载从网站下载 apk 安装试试
    qq471847975
        12
    qq471847975  
       May 3, 2018 via Android
    usb 线带宽有限,5G 无线最好了
    Hansah
        13
    Hansah  
       May 3, 2018
    @hicdn 内置的。。。不 root 没法卸载,连禁用都不行,所以想找个替代品
    beginor
        15
    beginor  
       May 3, 2018 via Android
    搭各位老司机的车,求一款能够完美原生 Miracast 接收的 app, 乐播投屏没声音, 而且不是原生 Miracast。

    Windows 10 自带了 Miracast 接收, 堪称完美。
    somebody
        16
    somebody  
       May 3, 2018   ❤️ 3
    这里有个开源的实现,效果很好,可以看下实现 https://github.com/Genymobile/scrcpy
    ntdll
        17
    ntdll  
       May 3, 2018
    @somebody 似乎很好,不过试了试手头的两个设备都以不同的错误告终

    华为 EMUI [API 22]
    小米 MIUI [API 26]
    nicevar
        18
    nicevar  
       May 3, 2018
    情况不一样的,adb 截图默认没有优化处理,截图完成之后直接把 png 拉过来,那么大的图片当然慢,投屏的时候无论是截屏还是传输都是有优化处理的,你 pull 一张 png 的图片时间够投屏的时候传很多帧了
    applehater
        19
    applehater  
       May 3, 2018
    @beginor 好像现在很多手机都不支持有线视频输出,比如我看黑鲨手机就完全看不到视频输出的介绍
    yufz
        20
    yufz  
       May 3, 2018   ❤️ 1
    scrcpy 基于 adb, 延迟已经很不错了
    edsion996
        21
    edsion996  
       May 3, 2018 via iPhone
    minicap 了解一下
    somebody
        22
    somebody  
       May 4, 2018   ❤️ 2
    @gam2046 我试过荣耀 V10(API 26 ),小米 Note( API 23 ),没有问题

    大概看了下 scrcpy 的实现,启动时 push 一个 apk 到手机的 /data/local/tmp/scrcpy-server.jar ,启动 com.genymobile.scrcpy.Server。

    Server 反射调用隐藏的 android.view.SurfaceControl 类的方法,获取屏幕画面应该是 SurfaceControl.createDisplay/setDisplaySurface/setDisplayProjection 这一组方法。画面输出到 MediaCodec 提供的 Surface,Codec 使用 avc 编码后的视频流通过 socket 传输到 PC 端展示,PC 端使用 libsdl 作为 UI toolkit。所以并不是使用 adb 截屏或录屏
    Bryan0Z
        23
    Bryan0Z  
       May 4, 2018 via Android
    @blackbbc 学到了,一直用的 tc,原来还有更好的
    tonyaiken
        24
    tonyaiken  
       May 4, 2018
    @somebody 谢谢分享,很好用
    JJFJJ
        25
    JJFJJ  
       May 4, 2018
    @bfdh miracast
    somebody
        26
    somebody  
       May 4, 2018 via Android   ❤️ 4
    @somebody scrcpy 的作者详细说明了他的设计和实现,作者水平很高,代码质量也不错,scrcpy 是个很好的学习项目

    https://github.com/Genymobile/scrcpy/blob/master/DEVELOP.md
    clouduan
        27
    clouduan  
    OP
       May 4, 2018 via Android
    @somebody 感谢
    ilovesusu
        28
    ilovesusu  
       Aug 24, 2018
    楼主最后的解决方案是啥?!
    vtoexshan
        29
    vtoexshan  
       Mar 12, 2019
    scrcpy v1.8 死活下不了,求大婶帮忙
    237852401
        30
    237852401  
       Mar 17, 2019
    vtoexshan
        31
    vtoexshan  
       Mar 17, 2019
    @237852401 网速下不动 zip,浏览 github 页面还可以
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   957 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 22:45 · PVG 06:45 · LAX 15:45 · JFK 18:45
    ♥ Do have faith in what you're doing.