gpt4 book ai didi

c# - 屏幕传输

转载 作者:行者123 更新时间:2023-12-04 23:09:29 24 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .


8年前关闭。







Improve this question




我需要开发一个程序,通过互联网将用户的屏幕和声音传输给另一个用户。场景可以这样可视化:

有一位老师在他的电脑前,在他的电脑上写了一些代码(例如:visual studio)。他有一个麦克风。有两个学生看着老师的屏幕,从他们自己的电脑上听他的声音。

有几种替代方法可以获取用户的屏幕截图并将其传输,如 ffmpeg、aforge 或通过 c#(通过 udp)自编码的屏幕截图程序。尝试了所有替代方案。

但是,问题是它们都太慢了,或者造成视频分辨率不佳。应该有另一种方式,因为有些程序达到了高质量。比如teamviewer、windows远程桌面、logmein都可以发送高质量的画面。此外,teamviewer 也可以发送声音。

我应该从哪里开始克服这个使命?哪个平台、语言、协议(protocol)有用?

最佳答案

我知道这听起来很简单,但屏幕/桌面共享实际上是一个非常复杂的主题集合。不适合胆小的人:P
当然已经有many applications了专门为做这种事情而构建,包括 BigBlueButton这是为学术组织设计的。
你确定要重新发明轮子吗?
如果是这样...
屏幕共享有两种基本方法,一种简单而缓慢,另一种复杂且难以实现。
帧缓冲区复制
捕获屏幕图像并将其发送给客户。正如您已经发现的那样,这可能会占用大量带宽,更不用说输出可能会非常跳跃。
这是 VNC 和其他各种应用程序使用的方法。已经在 VNC 上做了大量工作,通过识别图像中的变化并仅发送那些发生变化的区域来加速该过程,VNC 的不同化身使用各种压缩方法来压缩增量图像。
有一个C# implementation of VNC您可以将其用于应用程序的视频部分。
VNC 及其 RFB (Remote Frame Buffer) 协议(protocol)的一个限制是它仅是图形。然而,RFB 是可扩展的,并且至少有一个应用程序 (QEMU) 已将音频流添加到协议(protocol)中。我建议使用您自己的音频扩展,而不是尝试实现 QEMU……例如,它不进行压缩,因此音频流将占用大量带宽来传输。
优势:易于实现。
缺点:高延迟,高带宽。
高级命令流
一些更高级的协议(protocol)不是简单地传输屏幕图像(尽管它们通常也这样做),而是将绘图命令流发送到客户端,客户端在本地进行渲染。
这就是 RDP、X11 和其他一些协议(protocol)真正大放异彩的地方。产生这些变化的命令被转发给客户端,而不是对正在显示的图像中的变化使用react。
这个难度要大得多,需要深入了解 Windows 处理屏幕绘制的方式。可悲的是,我不知道这种方法没有捷径。如果有某种方法可以为当前桌面获取 RDP 流并发送它,那就太好了,但到目前为止这是不可能的。
优势:中低延迟,减少带宽。
缺点:难以实现,需要对操作系统的内部工作有广泛的了解。

除非您可以找到使用内置 RDP 堆栈来实现您的目标的代码,否则您最好的选择可能是在 VNC 样式的系统上工作,该系统具有对 RFB protocol 的自定义扩展。添加音频 channel 。

关于c# - 屏幕传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20461329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com