美文网首页
自适应视频流媒体码率算法在mininet中仿真

自适应视频流媒体码率算法在mininet中仿真

作者: help_youself | 来源:发表于2021-01-04 20:34 被阅读0次

     自适应视频流的目标:

    The goal of an adaptive video player is to choose the bitrate level for future chunks to deliver the highest possible QoE; e.g., maximizing bitrate while minimizing the likelihood of rebuffering and avoiding too many bitrate switches

     在最大码率的同时最小化二次缓冲可能性和码率切换的约束下,选择合适码率的视频,来尽可能的提高用户的体验。
     目前,已经有很多算法提出。我移植了一些现有的算法,在mininet中对这些算法进行了简单的评估。代码主要参考了两个作者的实现[1,2]。包含的算法有:Festive[3], Panda[4],tobasco[5],osmp[6], raahs[7],fdash[8],sftm[9],svaa[10]。
     仿真拓补:
    2h1s.py

    #!/usr/bin/python
    import time
    import sys
    import os
    import threading
    import subprocess
    import signal
    
    from mininet.cli import CLI
    from mininet.log import lg, info
    from mininet.node import Node
    from mininet.util import quietRun
    from mininet.net import Mininet
    from mininet.link import TCLink
    from mininet.link import Intf  
    from mininet.node import OVSSwitch,Node
    
    def test_adaptation_algorithm(algo):
        bottleneckbw=3
        nonbottlebw=500;
        rtt=40*3/2
        buffer_size =bottleneckbw*1000*rtt/(1500*8) 
        net = Mininet( cleanup=True )
        h1 = net.addHost('h1',ip='10.0.0.1')
        h2 = net.addHost('h2',ip='10.0.0.2')
        s1 = net.addSwitch( 's1' )
        c0 = net.addController('c0')
        net.addLink(h1,s1,intfName1='h1-eth0',intfName2='s1-eth0',cls=TCLink , bw=nonbottlebw, delay='10ms', max_queue_size=10*buffer_size)
        net.addLink(s1,h2,intfName1='s1-eth1',intfName2='h2-eth0',cls=TCLink , bw=bottleneckbw, delay='10ms', max_queue_size=buffer_size)    
        net.build()
        net.start()
        time.sleep(1)
        server_p=h2.popen("./t_dash_server -h 10.0.0.2 -p 3333")
        cmd="./t_dash_client -r 10.0.0.2  -p 3333 -a  %s"%algo
        client_p=h1.popen(cmd);
        possion_p=h2.popen("./possion_sender 10.0.0.1 1234")
        while True:
            ret=subprocess.Popen.poll(client_p)
            if ret is None:
                continue
            else:
                break
        os.killpg(os.getpgid(server_p.pid),signal.SIGTERM)
        os.killpg(os.getpgid(possion_p.pid),signal.SIGTERM)
        server_p.wait()  
        possion_p.wait()
        net.stop()
    if __name__ == '__main__':
        algorithms=["festive","panda","tobasco","osmp","raahs","fdash","sftm","svaa"]
        for i in range(len(algorithms)):
            test_adaptation_algorithm(algorithms[i])
            print("done: "+algorithms[i])
    
    

     Result:


    dash-pic-1.png
    dash-pic-2.png

     The code in this blog is available at github[11].

    Reference:
    [1] haraldott dash
    [2] djvergad dash
    [3] Improving Fairness, Efficiency, and Stability in HTTP-based Adaptive Video Streaming with FESTIVE
    [4] Probe and Adapt: Rate Adaptation for HTTP Video Streaming At Scale
    [5] Adaptation Algorithm for Adaptive Streaming over HTTP
    [6] QDASH: a QoE-aware DASH system
    [7] Rate adaptation for adaptive HTTP streaming
    [8] FDASH: A Fuzzy-Based MPEG/DASH Adaptation Algorithm
    [9] Rate adaptation for dynamic adaptive streaming over HTTP in content distribution network
    [10] Towards agile and smooth video adaptation in dynamic HTTP streaming
    [11] dash-sim on mininet
    [12] 自适应视频流媒体理论控制模型论文理解
    [13] 基于机器学习的自适应码率算法的进一步探索与改进

    相关文章

      网友评论

          本文标题:自适应视频流媒体码率算法在mininet中仿真

          本文链接:https://www.haomeiwen.com/subject/zyqboktx.html