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

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

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

    我试过用 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 是可以在投屏端操作的,因此是双向的,无线投屏则是单向的。
    siknet
        6
    siknet  
       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 输出图像+声音。
    siknet
        10
    siknet  
       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 无线最好了
    siknet
        13
    siknet  
       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 好像现在很多手机都不支持有线视频输出,比如我看黑鲨手机就完全看不到视频输出的介绍
    jinyang656
        20
    jinyang656  
       2018-05-03 23:13:21 +08:00   ❤️ 1
    scrcpy 基于 adb, 延迟已经很不错了
    zjb861107
        21
    zjb861107  
       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   ·   实用小工具   ·   5383 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:45 · PVG 15:45 · LAX 23:45 · JFK 02:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.