问题描述
我用 Python 开发了一个视频流 server-->client
应用程序。
我一直在尝试通过以下方式测量接收方(客户端)的 throughput (kb/s)
:
throughput = [frames's received bytes/s] / [frames receiving time/s]
然而,这种方法有时会为 2X
或 3X
分配带宽(使用 tc
和 netem
工具),特别是对于像移动网络中的那些经验丰富的可变带宽!。特别是当带宽从一个值变为另一个值时,测得的吞吐量会增加一倍或三倍!!
我试过的代码:
frtpPacket,datasize = self.rcvrSock.receiveFRTPpacket()
frame_start_ts = time.time()
while prev_frame_no == frtpPacket.frame_no:
byteReceived = byteReceived + datasize
# measure packet receiving time
packet_delay_start = time.time()
frtpPacket,datasize = self.rcvrSock.receiveFRTPpacket()
packetdelay = time.time() - packet_delay_start #in seconds
accFrame_delay = accFrame_delay + time.time() - frame_start_ts - packetdelay
if time.time() - start > 1:
start = time.time()
byteReceived_in_bits = (byteReceived/accFrame_delay) * 8 # convert to bps
byteReceived = 0
accFrame_delay = 0
其中 rcvrSock
是在类构造函数中初始化的套接字,用于接收帧的数据包。基本上,累积帧延迟和接收的字节,然后每 1 秒计算一次吞吐量 (frames bytes/frames time)
。
您是否有更好的方法来应对可变带宽?
有任何参考或建议吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)