kcp可以在组播中使用吗(一对多场景),是否有可以实现的思路
局域网组播一对一的情况下,使用kcp是可行的 但是一对多的场景,如果每个接收端都ack,程序就崩了
尝试过一对多的时候,限制仅一个设备ack,但是组播每个设备的丢包率是不一样的,每个设备收到的数据不一样,所以次方法行不通
想请教一下,是否有其他实现的思路,或者组播一对多不能使用kcp?
天底下就没几个协议支持组播,并非没有原因,即便让你看起来好像是组播,也需要分开维护每个远端的状态,这和 多创建几个 kcp 对象有啥区别?你自己直接多创建几个 kcp 对象会掉两斤肉么?
一对多的情况下,为每个接收端创建一个kcp对象,是不是意味着同时要给每个接收端都发送一份数据,还是说只发一份数据,丢包数据会重传
我的使用场景是一份视频流发送给多个接收端,为什么使用组播,是为了降低发送的数据量,只发一份数据,所有的接收端都可以观看,降低带宽开销
自己设计吧,你可以每个客户端用 kcp 和服务端连接,平时公共视频数据,你用独立 udp 组播,然后各个客户端发现有缺失了,再用 kcp 向服务器请求重发,服务器再用 kcp 单独发给各个客户端他们缺失的部分;并且客户端要做限制,超过一定时间重发没回来就直接丢帧吧。
尝试过一对多的时候,限制仅一个设备ack,但是组播每个设备的丢包率是不一样的,每个设备收到的数据不一样,所以次方法行不通
看看喷泉码是不是符合你的要求。kcp用的是块码(block code),丢包率不同的组播场景下,很难做码率自适应。
他都组播了,哪里来的码率自适应。
他都组播了,哪里来的码率自适应。
他的场景下各个设备有不同的丢包率。他的意思就是想要组播时也能码率自适应。我的意思是,块码的机制难以在组播场景下实现码率自适应。
kcp没法在组播里面用,我的场景不需要只适应,允许丢包,只是想丢包不要太严重,喷泉码可以一定程度上解决问题,代价是更高的带宽
涉及应答的协议应该都不适用于组播
@yeliqseu 感谢提醒
问了gpt 码率自适应:就是根据网络实时状态(带宽、延迟、丢包率等)动态调整发送数据的速率,让数据流尽可能适配当前链路能力。
感觉不改kcp源码就能实现啊,output最后一个参数void *user 填写成 kcp控制块,这样可以读取到信道状态(带宽、延迟、丢包率),然后自己把udp封装一下喷泉码 缓一下根据信道状态控速。
组播控不了,每个接受者的丢包率、延迟都是不一样的
组播控制不了那不是软件层面的问题吧,组播根本上就没法控制吧
组播不能用kcp,想要udp组播抗丢包用喷泉码就行了