RDP 和串流游戏软件的技术实现差异是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
SeleiXi
V2EX    程序员

RDP 和串流游戏软件的技术实现差异是什么?

  •  
  •   SeleiXi
    SeleiXi 2024-02-24 22:14:24 +08:00 via Android 6222 次点击
    这是一个创建于 645 天前的主题,其中的信息可能已经有所发展或是发生改变。
    35 条回复    2024-09-04 09:03:58 +08:00
    Sisyphe42
        1
    Sisyphe42  
       2024-02-24 22:50:35 +08:00
    呃,各家的串流实现方案都不同吧
    ysc3839
        2
    ysc3839  
       2024-02-24 22:59:10 +08:00
    虚拟显卡和屏幕录像
    paopjian
        3
    paopjian  
       2024-02-24 23:16:21 +08:00
    一个是服务器渲染好把客户端当屏幕放,一个是服务器渲染好录像发过来?
    dann73580
        4
    dann73580  
       2024-02-24 23:43:11 +08:00
    串流就是服务端录制转码然后全量发过去……客户端负责解码然后播放。rdp 本质是是客户端负责绘制,在不涉及到视频传输和打游戏这种大动态场景的情况下,是可以无限接近本地体验的,非常适合办公场景。
    Evovil
        5
    Evovil  
       2024-02-24 23:57:51 +08:00   2
    RDP 是云桌面
    串流是云游戏

    侧重不同,你细品

    云桌面追求的是画质,客户端渲染,画质接近 native ,清晰可见 缺点是输入延迟较高,适合网页,办公等

    串流一般是云游戏,低、极低延迟,讲究操作跟手,一般采用全硬件加速编解码(包括硬件色彩转换),典型有采用 264 265 + udp 这种,极限情况下延迟可以做到 20ms ( native 都有 10ms 延迟包括显示器), 缺点是画质比较低可能受网络波动影响,所以会采用无 I 帧无 B 帧 全 P 帧这种 + DRC (动态分辨率) 在保证延迟的前提下画质可能损失
    zsxzy
        6
    zsxzy  
       2024-02-25 00:08:23 +08:00
    @Evovil 无 I 帧能显示图像吗.. airplay 镜像时用的 tcp 传输数据, 不知道基于啥考虑的
    version
        7
    version  
       2024-02-25 09:17:27 +08:00
    RDP 是微软自己琢磨的一套远程优化.应用级别的优化.图像优化等.今年会推出独立单独远程应用.例如某个 exe 远程.而不需要整个系统远程.支持触点
    串流就理解为主机负责 RTMP 直播推流..客户端就等于看直播一样.想要客户端不卡也需要解码能力和连接主机带宽足够.手柄和键盘映射需要靠另外流去转发
    Evovil
        8
    Evovil  
       2024-02-25 09:48:57 +08:00
    @zsxzy 表述可能有问题,应该叫无限 GOP, 相关参数 以 nvidia 举例子 NVENC_INFINITE_GOPLENGTH
    Evovil
        9
    Evovil  
       2024-02-25 09:50:12 +08:00
    在正常情况下只有第一帧 I 帧后面全是 P 帧
    vsyf
        10
    vsyf  
       2024-02-25 10:30:15 +08:00 via Android
    @Evovil 像 webrtc 我记得好像是 3000 张还是 3000 秒,接收端在一个 frame 超时了还拼不出来的时候会重新 request idr 。
    nvidia 的是接收端不要就一直给 p frame 吗?
    vsyf
        11
    vsyf  
       2024-02-25 10:57:52 +08:00
    我理解的区别:
    串流是抽象一个虚拟屏,在系统给物理屏一张画面的时候,同时给虚拟屏一张; 之后去编码传输,同时可以进行裁剪、丢帧、改变码率来调整网络带宽的消耗以达到较低延迟的目的。
    RDP 是在系统上提供另一个支持,就是把完整的画面分区域传输; 比如现在浏览器在播视频,那只传输视频那一个区域,像鼠标指针、系统底部 dock 和 chrome 标签栏都不变就不用传输。其他串流软件能实现的机制按道理 rdp 同样可以呀。

    这里我就不理解哪里会引起延迟更高呢?按道理不是应该更低吗?
    vsyf
        12
    vsyf  
       2024-02-25 11:04:19 +08:00
    @vsyf #11
    @Evovil
    帮帮解惑一下
    cheng6563
        13
    cheng6563  
       2024-02-25 11:23:11 +08:00
    据说有些串流软件可以做到比显示器延迟更低,不知真假。
    houzhenhong
        14
    houzhenhong  
       2024-02-25 12:06:51 +08:00
    @vsyf #10

    我看 srs 的 webrtc 实现,接收端的 Picture Loss Indication 是 6 秒,刚刚接触音视频不知道其他实现是怎么样的。(我只是一个切图仔)

    https://github.com/ossrs/srs/blob/v6.0.48/trunk/src/app/srs_app_config.cpp#L4560

    @zsxzy #6

    我最开始还不相信,大概找了一下 airplay 的开源实现,发现 airplay 的 mirror 真是用 tcp 做的,的确挺奇怪的。

    https://github.com/SteeBono/airplayreceiver/blob/main/AirPlay/Listeners/MirroringListener.cs#L15

    https://github.com/FDH2/UxPlay/blob/v1.68.2/lib/raop_handlers.h#L807
    https://github.com/FDH2/UxPlay/blob/v1.68.2/lib/raop.c#L597
    houzhenhong
        15
    houzhenhong  
       2024-02-25 12:25:53 +08:00
    测试了一下 airplay 的 h264 数据,除了第一帧是 i 以外其他都是 p ,找了几个开源实现都没有类似 RTCP 的 PLI 机制,这个是使用 TCP 的原因?

    Evovil
        16
    Evovil  
       2024-02-25 16:22:57 +08:00   1
    @vsyf 你的理解大致没错 不过有些细节:
    1. rdp 如果应用在云桌面,是个很好的方案,因为画面变动少,可以获得很好的画质。 但是游戏、视频这类一秒变动 24fps/60fps 的在使用 rdp 就会延迟明显卡顿,换句话说就不丝滑了
    - 如果传输裸图像,那么带宽会巨高,而且裸图像传输时间也很长
    - 如果传输压缩的图像(比如 mjpeg ) 涉及到 cpu 编码,cpu 编码+传输延迟太高,如果选择硬件加速,那得各种微调
    - 云桌面一般首先会设计 buffer 保证画面质量和避免撕裂等抵消网络波动,鼠标点击类,文字类操作超过 200ms 也不是特别影响

    2. 如果使用 264 ,那就玩的花了,首先有现成的硬件电路可以提供支持,Intel/nvidia/amd 都有独立的硬件管线,其次如果 windows 从抓帧 dx11 ,dxgi 等 api 也是从 gpu 走的,理论上可以显存->电路不出 gpu 完成 264encode ,再其次,P 帧就是差异帧,在不变化的时候帧很小,变相也节省了延迟,低变化甚至比显示器延迟更低 @cheng6563

    @houzhenghong 一般这类实现都是 infinite GOP
    hez2010
        17
    hez2010  
       2024-02-25 19:09:19 +08:00   3
    用 RDP 其实也可以看视频和打游戏,不过想要获得比较好的体验需要调整一些默认设置:

    注意要调整的是被远程的主机,而不是 client 。

    组策略里:计算机配置管理模板Windows 组件远程桌面服务远程桌面会话主机远程会话环境,开启优先 H.264/AVC 444 和 H.264/AVC 444 硬件编码这两个选项
    然后去注册表里:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations ,添加一个 DWMFRAMEINTERVAL 的 DWORD 值,选择 10 进制,然后填写 15 保存。

    重启计算机之后就能获得一个比较好的体验了。起码 60fps 是没啥问题的。
    jsq2627
        18
    jsq2627  
       2024-02-25 23:10:46 +08:00
    如楼上所说,RDP 在开启 H264 编码后,就和其他串流方案没什么区别了。
    hez2010
        19
    hez2010  
       2024-02-26 00:07:29 +08:00
    @jsq2627 开启之后工作原理还是跟原来一样的,只不过 RDP 此前对 H.264/AVC 内容是按照 420 编码的,切换到 444 之后能有效提升图像质量。另外就是顺便把原来的软件编码切换到硬件编码了。
    hez2010
        20
    hez2010  
       2024-02-26 00:25:30 +08:00
    @hez2010 另外 DWMFRAMEINTERVAL 越低帧数越高,但是你的网络和硬件不一定能带的动,如果太低了带不动了就会连接失败。可以一点一点往下调看能到哪里,一般来说调到跟你屏幕刷新率差不多就可以了。
    DWMFRAMEINTERVAL = 15 大概是 62fps
    DWMFRAMEINTERVAL = 7 大概是 114fps
    DWMFRAMEINTERVAL = 6 大概是 128fps
    DWMFRAMEINTERVAL = 5 大概是 172fps
    DWMFRAMEINTERVAL = 2 大概是 360fps
    abcbuzhiming
        21
    abcbuzhiming  
       2024-02-26 09:25:29 +08:00
    @hez2010
    开启优先 H.264/AVC 444 和 H.264/AVC 444 硬件编码这两个选项。
    ======
    你这其实就是开串流了,但是说真的 windows rdp 的串流效果不好,很明显的颜色失真现象。对比其它家串流哪怕是 4:2:0 的颜色也比 rdp 开串流好很多。更别说还可以选 4:4:4
    gouziding
        22
    gouziding  
       2024-02-26 09:47:01 +08:00
    @hez2010 请教一下它的默认值给的是多少呢?
    giao123
        23
    giao123  
       2024-02-26 10:00:32 +08:00
    如果 gop 是无限的话,岂不是容错率很低,中间丢了一帧,后面的数据直接就是不正常的了,还是说有纠错策略
    hez2010
        24
    hez2010  
       2024-02-26 11:22:05 +08:00
    @abcbuzhiming 你可以开启 RDP 的 4:4:4 ,那个串流效果是真的好。
    hez2010
        25
    hez2010  
       2024-02-26 11:22:27 +08:00
    @gouziding 没有默认值,想要恢复默认把 DWMFRAMEINTERVAL 删了就行。
    leaflxh
        26
    leaflxh  
       2024-02-26 13:44:21 +08:00
    感觉上像是一个东西

    用过微软的 mstsc ,以及那个 UWP 应用,Steam link

    都是服务端录屏,客户端播放,然后做好交互。

    体验取决于服务端编码效率和客户端的解码效率,以及传输的延迟和带宽
    flyqie
        27
    flyqie  
       2024-02-26 14:47:44 +08:00 via Android
    @Evovil #5

    偏个楼哈。

    目前云桌面方案似乎广泛都放弃了 rdp ,rdp 这个方案不太适合目前的云桌面,用户在播放视频以及运行 3d 软件的时候都面临一定问题。

    而且 rdp 似乎很多功能与微软都深度绑定
    playboy0
        28
    playboy0  
       2024-02-26 16:47:59 +08:00
    @hez2010 #24 如何开启呢?我查了下网上的不好使呀,谢谢
    hez2010
        29
    hez2010  
       2024-02-26 20:56:56 +08:00
    @playboy0 组策略里:计算机配置管理模板Windows 组件远程桌面服务远程桌面会话主机远程会话环境,开启优先 H.264/AVC 444 和 H.264/AVC 444 硬件编码这两个选项
    hez2010
        30
    hez2010  
       2024-02-26 21:00:21 +08:00
    RDP 其实是开放协议,也有不少很完整的开源实现的,最著名的比如 https://github.com/FreeRDP/FreeRDP ,这个 FreeRDP 也被微软用在了 WSLg 里面,可以说是官方认可了。
    不过 RDP 涉及到的协议实在是太多了,从差分算法,到图像到音频到视频编码,再到网络协议和 GPU 硬件加速等等,一般人很能全都实现完: https://github.com/FreeRDP/FreeRDP/wiki/Reference-Documentation
    hez2010
        31
    hez2010  
       2024-02-26 21:01:34 +08:00
    @hez2010 #30 楼上本来是打算回复 @flyqie #27 的,结果忘记 mention 了。
    flyqie
        32
    flyqie  
       2024-02-27 00:38:46 +08:00
    @hez2010 #30

    感谢指点,收获颇丰.

    rdp 这个确实是太多了. freerdp 好像也没有完全实现完...
    playboy0
        33
    playboy0  
       2024-02-27 20:25:56 +08:00
    @hez2010 #20 DWMFRAMEINTERVAL 除了 10 之外的值好像都不行啊
    bthulu
        34
    bthulu  
       2024-03-13 09:08:36 +08:00
    @version 今年会推出独立单独远程应用, 这个消息是真的吗
    chixinzei
        35
    chixinzei  
       2024-09-04 09:03:58 +08:00
    @vsyf #11 你得考虑串流的压缩率有多夸张,常见的 h264,h265 的压缩率能极大程度上减轻网络传输时的流量,RDP 则不同,他指令压缩在视频播放时,没有 视频压缩效率高,网上有对比过,所以一般 RDP 只建议办公(流量远低于串流办公),但是一旦涉及到视频播放,玩游戏,RDP 的流量就会陡然上升,此时就建议用串流。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1075 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:37 PVG 01:37 LAX 09:37 JFK 12:37
    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