C# - 减小图像大小的最佳方法是什么(用于通过 tcp 进行流式传输)

发布于 2024-12-18 11:33:16 字数 260 浏览 0 评论 0原文

我编写了一个将实时屏幕流式传输到远程应用程序的应用程序。它抓取屏幕(将图像大小调整为 640x480),然后使用 GIF 压缩(使用 System.Drawing)来压缩图像,将其保存到 byte[] 数组中并传输它到另一个应用程序。

问题是我获得的图像约为 50KB,这意味着在 30FPS 下每秒需要传输 1.5MB 的数据。目前我只能获得 8-10 FPS。我知道可以通过某种方式解决这个问题。也许使用 Flash 视频使用的技术?

I've written an application that streams live screen to a remote app. It grabs the screen (resizes the image to 640x480) and then compresses the image using GIF compression (using System.Drawing), saves it into a byte[] array and transfers it to the other app.

The problem is that the image I get is about 50KB which means that at 30FPS it would require 1.5MB of data transferred each second. At the moment I only get 8-10 FPS. I know it's possible to solve this somehow. Maybe using the technique that flash videos use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

神经大条 2024-12-25 11:33:16

就我个人而言,我建议使用 VNCSharp - 它会为您完成大部分繁重的工作。有些人可能会说,重新编写这个代码太疯狂了。

如果没有,那么流式传输图像就会浪费带宽 - 您需要有效地构建视频流并传输它。

Personally I'd recommend using VNCSharp - it will do most of the heavy lifting for you. Some might say that it'd be madness to code this up again.

If not then streaming images is a waste of bandwidth - you need to effectively build a video stream and transmit that.

忆梦 2024-12-25 11:33:16

由于您不需要动画并且希望保持无损压缩,因此使用 PNG 而不是 GIF 可以获得更好的压缩效果(而且 PNG 是无专利的)。 据此可节省 10% 到 30% 之间。

Since you don't need animation and want to stay with loss-less compression you would get somewhat better compression with PNG instead of GIF (and PNG is patent-free). According to this the savings is between 10 to 30%.

彩扇题诗 2024-12-25 11:33:16

我认为使用逐个屏幕捕获并不是获得实时屏幕流的好方法。视频格式通常假设在许多帧之间有一小部分区域会发生变化。另一方面,您需要做更多工作才能从屏幕上捕获视频。

您可以从以下文章开始:

http:// /betterlogic.com/roger/2010/07/list-of-available-directshow-screen-capture-filters/

http://www.codeproject.com/KB/dialog/screencap.aspx

I think use screen by screen capture isn´t a good approach to get a live screen streaming. Video formats, usually, assumes that between a lot of frames you have a small couple of areas that changes. In the other hand you´ll need to work a bit more to capture a video from the screen.

You can start from these articles:

http://betterlogic.com/roger/2010/07/list-of-available-directshow-screen-capture-filters/

http://www.codeproject.com/KB/dialog/screencap.aspx

梦魇绽荼蘼 2024-12-25 11:33:16

您最好压缩视频流,而不是压缩图像。这就是视频编解码器实现高压缩的方式:通过利用流中连续图像的相似性。

如果你一张一张地压缩图像,你就会失去这种性能优势,并且会在带宽上产生巨大的差异。

Rather than compressing images, you'd better compress video streams. This is how video codec achieve high compression : by exploiting similarities into consecutives images in the stream.

If you compress your images one by one, you loose this performance advantage, and it makes a huge difference in bandwidth.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文