我正在为一个视频会议应用设计自己的传输协议。我想知道基于连接或无连接的方法对于这个应用程序来说哪种更好。
我正在为一个视频会议应用设计自己的传输协议。我想知道基于连接或无连接的方法对于这个应用程序来说哪种更好。
TCP 的注意事项是(假设采用某种 MPEG 编码),如果由于网络问题导致数据包延迟,视频将会冻结或延迟,直到数据到达。根据 TCP 的定义,视频将无误。
使用 UDP 时,虽然视频将是连续的,但视频中可能会出现错误。对于采用 MPEG 样式协议的情况,其中数据以周期性关键帧和它们之间的增量帧形式发送,如果一个包含增量帧的 UDP 数据包未能到达,则您的视频将变得模糊且通常容易出错,因为连接降级了。如果关键帧丢失,则会出现其他错误,也许根本没有视频。
如果您拍摄的对象在移动,且丢失增量帧会真正破坏图像,则可能需要使用 TCP 以保证获取的视频至少是准确的。但是,如果您拍摄的对象相当静止(如果是用于视频会议,则可能不是这样),则 UDP 可能足够,因为偶尔丢失增量帧可能不会影响整体视频质量。
请注意,如果您真的从头开始自己构建解决方案,则可以添加代码以允许故障,并尝试以特殊方式处理它们(例如,如果帧延迟太多,则超时TCP连接,并相应地通知用户)。TCP对于这种应用程序是不合适的。问题出在重传上。如果接收方决定一个数据包丢失或损坏,并请求重新传输,TCP不允许单个数据包被重新传输。从丢失/损坏的数据包开始的每个数据包都将被重新传输。随着网络中不断传输高带宽流的数据包,即使有一点小故障也会导致视频流中不可接受的延迟,而您可能无法从中恢复。
使用UDP作为传输协议,并设计应用层,使其在网络条件恶化时能够优雅地降级。