我已经编写了一个将实时屏幕流式传输到远程应用程序的应用程序。它抓取屏幕(将图像大小调整为640x480),然后使用GIF压缩(使用System.Drawing
)压缩图像,将其保存到byte[]
数组并将其传输到另一个应用程序。
问题是我得到的图像大约是50KB,这意味着在30FPS时,每秒需要传输1.5MB的数据。目前我只获得8-10 FPS。我知道有可能以某种方式解决这个问题。也许使用Flash视频使用的技术?
答案 0 :(得分:2)
就我个人而言,我建议使用VNCSharp - 它将为您完成大部分繁重工作。有些人可能会说再次编码会很疯狂。
如果没有,则流式传输图像会浪费带宽 - 您需要有效地构建视频流并进行传输。
答案 1 :(得分:0)
由于您不需要动画并希望保持无损压缩,因此使用PNG而不是GIF(PNG无专利)可以获得更好的压缩效果。 According to this节省的费用在10%到30%之间。
答案 2 :(得分:0)
我认为通过屏幕截图使用屏幕不是获得实时屏幕流的好方法。视频格式通常假设在很多帧之间有一小部分区域发生变化。另一方面,您需要更多工作才能从屏幕上捕获视频。
您可以从这些文章开始:
http://betterlogic.com/roger/2010/07/list-of-available-directshow-screen-capture-filters/
答案 3 :(得分:0)
您最好压缩视频流,而不是压缩图像。这就是视频编解码器实现高压缩的方式:通过利用流中连续图像的相似性。
如果您逐个压缩图像,则会失去这种性能优势,并且带宽会产生巨大差异。