【发布时间】:2013-02-18 17:27:24
【问题描述】:
我的 C# 代码中有 30FPS 的视频帧,我想在本地主机中广播它,以便所有其他应用程序都可以使用它。我虽然因为它是一个视频并且不担心任何数据包丢失并且不需要从客户端连接/接受,所以 UDP 是一个不错的选择。
但是这里有很多问题。
- 如果我用UDP单播速度就够了,大概25FPS(CPU使用率是25% 这意味着在我的 4 核 CPU 中的一个线程上 100%,这并不理想。但 至少它发送了足够的数据集)。但单播无法传递数据 致所有客户。
- 如果我使用广播速度非常低。在 CPU 使用率相同的情况下大约 10FPS。
我能做什么?!数据在同一台计算机上,因此无需从 LAN 等远程访问。我只想要一种在同一台机器的不同应用程序之间每秒传输约 30MBytes 数据的方法。 (640x480 是固定大小的 Image x 30fps x 3byte per pixel is about 27000KByte per second)
- UDP 组播性能更好吗?!
- 即使我接受每个客户端,TCP 是否可以给我更好的性能 并独立发送给他们?!
- 还有比Socket更好的方法吗?!内存共享什么的?!
- 为什么 UDP 广播这么慢?!每只大约 10MBytes 第二个?!
- 有没有一种快速的方法来压缩高性能的帧(到 每秒编码 30fps 并在其他部分解码)?客户端应用程序在 C++ 所以这一定是一种跨平台的方式。
我只是想在这里了解其他开发者的经验和想法,所以请写下你的想法。
编辑:
有关数据的更多信息:数据采用位图 RGB24 格式,它们以 30FPS 的速度从设备流式传输到我的应用程序。我想将此数据广播到其他应用程序,他们需要再次将这些图像设为 RGB24 格式。没有标题或任何东西,只有固定大小的位图数据。所有操作都必须即时执行。无论使用有损压缩算法还是其他任何东西。
【问题讨论】:
-
是否有一些现有的流媒体视频协议之一不适合的原因,以及为什么使用众多视频流解决方案之一不起作用?这是一个已通过多种不同方式解决的问题。当然,其中一种方法应该可以满足您的需求,并且不需要您重新发明轮子。
-
@Pete,你知道任何基于 UDP 的跨平台(.Net、C++)视频流库吗?!不幸的是我找不到一个。因为在没有库的情况下实现这些协议之一并不比发明整个解决方案更容易。
-
FFMPEG 不是一个用于转换(编码/解码)视频格式的命令行应用程序吗?!如何将它用于 .Net 中的位图对象流式传输?!
标签: c# image sockets udp video-streaming