投屏软件的原理是什么?它为什么比用 adb 快许多? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
clouduan
V2EX    Android

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

  •  1
     
  •   clouduan 2018-05-03 12:20:32 +08:00 32385 次点击
    这是一个创建于 2797 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    华为 EMUI [API 22]
    小米 MIUI [API 26]
    nicevar
        18
    nicevar  
       2018-05-03 22:10:59 +08:00
    情况不一样的,adb 截图默认没有优化处理,截图完成之后直接把 png 拉过来,那么大的图片当然慢,投屏的时候无论是截屏还是传输都是有优化处理的,你 pull 一张 png 的图片时间够投屏的时候传很多帧了
    applehater
        19
    applehater  
       2018-05-03 23:09:55 +08:00
    @beginor 好像现在很多手机都不支持有线视频输出,比如我看黑鲨手机就完全看不到视频输出的介绍
    yufz
        20
    yufz  
       2018-05-03 23:13:21 +08:00   1
    scrcpy 基于 adb, 延迟已经很不错了
    edsion996
        21
    edsion996  
       2018-05-03 23:36:55 +08:00 via iPhone
    minicap 了解一下
    somebody
        22
    somebody  
       2018-05-04 01:03:29 +08:00   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  
       2018-05-04 01:10:10 +08:00 via Android
    @blackbbc 学到了,一直用的 tc,原来还有更好的
    tonyaiken
        24
    tonyaiken  
       2018-05-04 08:26:06 +08:00
    @somebody 谢谢分享,很好用
    JJFJJ
        25
    JJFJJ  
       2018-05-04 12:07:31 +08:00
    @bfdh miracast
    somebody
        26
    somebody  
       2018-05-04 12:26:11 +08:00 via Android   4
    @somebody scrcpy 的作者详细说明了他的设计和实现,作者水平很高,代码质量也不错,scrcpy 是个很好的学习项目

    https://github.com/Genymobile/scrcpy/blob/master/DEVELOP.md
    clouduan
        27
    clouduan  
    OP
       2018-05-04 15:36:13 +08:00 via Android
    @somebody 感谢
    ilovesusu
        28
    ilovesusu  
       2018-08-24 10:42:02 +08:00
    楼主最后的解决方案是啥?!
    vtoexshan
        29
    vtoexshan  
       2019-03-12 16:20:41 +08:00
    scrcpy v1.8 死活下不了,求大婶帮忙
    237852401
        30
    237852401  
       2019-03-17 18:25:42 +08:00
    vtoexshan
        31
    vtoexshan  
       2019-03-17 23:21:20 +08:00
    @237852401 网速下不动 zip,浏览 github 页面还可以
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5487 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:42 PVG 15:42 LAX 23:42 JFK 02:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86