我必须尽可能快速,实时地通过UDP发送一系列视频帧,当我掌握了基础知识时,我遇到了各种各样的困难.我的一些目标:
>数据通常通过拨号发送(因此UDP而不是TCP),但也需要支持快速以太网.
>偶尔丢帧(因此UDP而不是TCP)是可以的.
>需要低延迟.远程接收的帧应该是最近发送的帧(在缓冲区中等待的帧数不超过几帧).
>我需要能够检测有效带宽,以便我可以或多或少地压缩帧以保持帧速率.
我已成功实现了大部分内容:
>我将帧数据分解为一个或多个大约500字节的数据报,每个数据报都有一个序列号和其他信息.接收器重新组装整个帧并检测是否缺少任何数据报.
>如果接收器检测到超过一定百分比的丢帧(例如最后10帧中的50%),我向发送方发送TCP消息以减慢50%.发送者比每个后续帧慢慢增加5%的速度.
>使用System.Net.sockets.UdpClient发送和接收数据.
>我有一个单独的TCP通道用于控制消息回发送者.
我现在面临的主要困难是检测有效带宽并处理延迟,特别是通过拨号(最大~4,000字节/秒).例如,如果我尝试使用TcpClient.Send()发送100,000字节/秒,则它们似乎到达(没有丢弃的数据报),但是在最后一个数据报到达时具有大的延迟.我认为TcpClient.Send()函数是阻塞的,直到缓冲区能够发送,这会混淆我当前的算法.
任何人都可以指出我的任何信息来源如何:
>通过UDP检测实际带宽.
>更好的动态调整带宽以适应可用管道的算法.
>以所需带宽顺畅发送数据.
>一种检测并将延迟降至最低的方法.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。