记录和重放UDP数据包与定时
本文关键字:数据包 定时 UDP 记录 | 更新日期: 2023-09-27 18:12:21
我需要实现一种记录UDP流的方式,以便稍后按要求重播该流。这个记录和重播必须使用相同的时间(达到一个合理的分辨率,人类用户几乎无法察觉,比如10ms):如果原始流在00:00到00:35秒有数据,然后静音到00:55,然后从00:55到01:34发送更多的数据,当我的应用程序重播该流时,必须观察到相同的分布。
如果它只是保存udp流到磁盘,然后重新播放它的问题,没有这个定时,它将是微不足道的使用Socket, NetworkStream或UdpClient。问题是,我无法设计出一种方法来修改标准接收算法,以使其在稍后的发送算法中很容易重播。作为奖励,还应该支持在任何时间标记(例如从00:15开始)开始重播的方法。
1)有什么方法可以轻松地在c#上实现这个功能吗?我们对此没有任何严格的非功能性要求,我们只需要它简单地工作。任何关于实现它的方法的提示都将非常感激。
2)如果这确实不是一件简单的事情,并且有人建议使用任何第三方组件来实现这一点,则要求它具有c# API(或从代码操作组件的方法),并且希望是开源或自由使用的软件。
这并不是c#的固有特性。但是我会尽力帮你做作业的。
我解决这个问题的方法仍然是将数据包存储到磁盘上。设计一个二进制格式的自定义文件结构,保存数据报被接收的时间,然后是UDP数据报本身。然后,您可以让程序读取该文件,找出udp有效负载是在什么时间交付的。这将为您提供重播数据包所需的东西,并将其存储为以后使用所有本机c#代码重播,而不是第三方模块。当然,这需要你知道如何写入文件,并能够将相关数据解析为c#中的类型化对象(Timespan,可能是Datagram的byte[]等)。所有这些决定都取决于你,程序编写者。它的长和短是我99%肯定没有原生功能的这种需求。这正是编程语言存在的原因。所以我们作为程序员可以为我们的客户/顾客/老师提供令人惊叹的解决方案;)