流式传输音频时如何模拟丢包、延迟等网络问题?

时间:2021-05-14 01:36:02

标签: networking video-streaming audio-streaming

我有音频文件,我想对其应用一些网络问题,例如数据包丢失、抖动、延迟.. 我需要模拟器来在我的音频文件上应用这个网络条件.. 请选择最适合我工作的模拟器,并且可以在 Windows 上安装它...

1 个答案:

答案 0 :(得分:0)

假设您正在研究如何实现这一点,正如标题所暗示的那样,并且不想在这里开始模拟器/模拟器的仇恨战争。我建议你看看mininet

它有一个用于简单任务的命令行界面和一个 Python API,可以让您自定义网络的大部分方面(例如带宽容量、延迟、丢失率等)。 您需要做的就是设置两个(或更多)主机,用链接连接它们并配置链接属性。这是一种根据您的要求获得不同延迟的简单方法。此外,您可以将链接丢失百分比设置为 0-100%。但是,如果您正在考虑丢弃特定的数据包,您要么必须借助传输协议在主机本身执行此操作,要么创建自定义控制器(交换机实现)。

以下是使用 Python API 的片段,可能会让您入门:

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
from mininet.util import irange

class MySingleSwitchTopo( Topo ):
    "Single switch connected to k hosts."

    def build( self, k=2, **_opts ):
        "k: number of hosts"
        self.k = k
        switch = self.addSwitch( 's1' )
        for h in irange( 1, k ):
            host = self.addHost( 'h%s' % h )
            self.addLink( host, switch, loss=0.1, latency=20, bw=5 ) # create a link with 20ms latency, 0.1% loss chance and 5Mb bandwidth capacity

if __name__ == '__main__':
    topo = MySingleSwitchTopo()

    net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink)

    net.start()

    h1, h2 = net.get('h1', 'h2')

    h1.cmd('iperf -s&') # Replace with your audio server app
    out = h2.cmd('iperf -c ' + h1.IP()) # Replace with your audio client app

    print(out) # output from the client app

    net.stop()
相关问题