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

2021-01-04  本文已影响0人  help_youself

 自适应视频流的目标:

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] 基于机器学习的自适应码率算法的进一步探索与改进

上一篇下一篇

猜你喜欢

热点阅读