我的C#代码中有30FPS的视频帧,我想在本地主机上广播它,以便所有其他应用程序都可以使用它。我虽然是因为它是一个视频,并且没有任何问题,如果任何数据包丢失,并且不需要连接/从客户端接受,UDP是一个不错的选择。通过套接字传输视频的帧
但这里有很多问题。
- 如果我使用UDP单播的速度是不够的,大约25FPS(CPU使用率是25% 是在我的4核CPU的一个线程是指100%,这是不理想,但 至少它发送足够的一套数据)。但单播不能向所有客户端发送数据 。
- 如果我用广播速度很低。大约10FPS具有相同的CPU使用率。
我该怎么办?数据在同一台计算机中,因此不需要从局域网等进行远程访问。我只是希望在同一台机器的不同应用程序之间每秒钟传输大约30MBytes的数据。 (640x480是固定大小的图像×30fps×3byte每像素约为27000KByte每秒)
- UDP Multicast是否有更好的性能?
- 即使我接受每个客户端 并单独发送给他们,TCP是否可以给我更好的性能?
- 有没有比Socket更好的方法?记忆共享什么的?!
- 为什么UDP广播很慢?!只有约10MBy每 秒?!
- 是否有一种快速压缩具有高性能帧的方法(至 每秒编码30fps并在其他部分解码)?客户端应用程序在 C++中,所以这必须是跨平台的方式。
我只想知道其他开发人员的经验和想法,所以请写下您的想法。 感谢您的帮助。
编辑:有关数据
更多信息:数据是位图格式RGB24,他们是从设备分流到我的30FPS的应用程序。我想将这些数据广播给其他应用程序,并且他们需要再次以RGB24格式显示此图像。没有标题或任何东西,只有固定大小的位图数据。所有操作必须在飞行中执行。无论使用有损压缩算法还是任何事物。
是有一些原因的许多现有的视频流的协议之一是不合适的,以及为什么使用许多视频流媒体解决方案的一个都不行?这是一个已经通过多种不同方式解决的问题。当然,其中一种方法应该能够满足您的需求,而不需要您重新发明轮子。 – Pete 2013-02-18 17:38:08
@Pete,你知道任何基于UDP的跨平台(.Net,C++)视频流媒体库吗?!不幸的是我找不到一个。因为在没有库的情况下实现这些协议之一并不容易,因此发明整个解决方案并不容易 – 2013-02-18 17:47:03
查看FFMPEG – Pete 2013-02-18 17:50:34