19 | | == 2. OpenFlow and GIMI Tutorial == |
| 19 | == 2. OpenFlow and GIMI Tutorial (VLC DASH) == |
| 20 | |
| 21 | [http://groups.geni.net/geni/wiki/GENIEducation/SampleAssignments/VLCDashTutorial/Execute VLC DASH Tutorial] |
| 22 | |
| 23 | Ruby Script to run VLC |
| 24 | |
| 25 | {{{ |
| 26 | defApplication('vlc', 'vlc') do |app| |
| 27 | |
| 28 | app.binary_path = "/usr/local/bin/vlc" |
| 29 | # app.path = "/home/cong/work/vlc-2.1.0-git/bin/vlc-static" |
| 30 | #app.version(2, 1, 0) |
| 31 | #app.shortDescription = "VLC" |
| 32 | app.description = "VLC multimedia player and streamer" |
| 33 | |
| 34 | app.defProperty("input", "Stream input (e.g. file or network address)", nil, |
| 35 | {:type => :string, :dynamic => false}) |
| 36 | # app.defProperty("sout", "Stream output", "--sout", |
| 37 | # {:type => :string, :dynamic => false}) |
| 38 | app.defProperty("intf", "Main interface module", "--intf", |
| 39 | {:type => :string, :dynamic => false}) |
| 40 | # app.defProperty("extraintf", "Extra interface module(s). Use --extraintf omlstats to enable OML", "--extraintf", |
| 41 | # {:type => :string, :dynamic => false}) |
| 42 | # app.defProperty("mtu", "Specifies the MTU of the network interface", "--mtu", |
| 43 | # {:type => :string, :dynamic => false}) |
| 44 | # app.defProperty("quiet", " Deactivates all console messages", "--quiet", |
| 45 | # {:type => :boolean, :dynamic => false}) |
| 46 | # app.defProperty("play-and-exit", "Exit VLC after playing all the items in the input stream list", "--play-and-exit", |
| 47 | # {:type => :boolean, :dynamic => false}) |
| 48 | |
| 49 | app.defMeasurement('dashRateAdaptation') do |mp| |
| 50 | mp.defMetric('chosenRate_bps',:int) |
| 51 | mp.defMetric('empiricalRate_bps',:int) |
| 52 | mp.defMetric('decisionRate_bps',:int) |
| 53 | mp.defMetric('buffer_percent',:int) |
| 54 | end |
| 55 | |
| 56 | app.defMeasurement('dashDlSession') do |mp| |
| 57 | mp.defMetric('chunkCount',:int) |
| 58 | mp.defMetric('readSession_B',:int) |
| 59 | mp.defMetric('readChunk_B',:int) |
| 60 | mp.defMetric('timeSession_s',:float) |
| 61 | mp.defMetric('timeChunk_s',:float) |
| 62 | end |
| 63 | end |
| 64 | |
| 65 | defProperty('theOne','node7-vlcovsinsta','ID of sender node') |
| 66 | |
| 67 | #defProperty('packetsize', 128, "Packet size (byte) from the sender node") |
| 68 | #defProperty('bitrate', 2048, "Bitrate (bit/s) from the sender node") |
| 69 | #defProperty('runtime', 40, "Time in second for the experiment is to run") |
| 70 | defProperty('duration', 100, "Duration of experiment") |
| 71 | |
| 72 | defGroup('Sender',property.theOne) do |node| |
| 73 | node.addApplication("vlc") do |app| |
| 74 | # app.setProperty('quiet', true) |
| 75 | # app.setProperty('play-and-exit', false) |
| 76 | app.setProperty('intf', 'dummy') |
| 77 | # app.setProperty('extraintf', 'omlstats') |
| 78 | app.setProperty('input', 'http://emmy9.casa.umass.edu/DASH_BuckBunny/www-itec.uni-klu.ac.at/ftp/datasets/mmsys12/BigBuckBunny/bunny_2s_480p_only/bunny_Desktop.mpd') |
| 79 | # app.setProperty('mtu', '1200') |
| 80 | app.measure('dashDlSession', :samples =>1) |
| 81 | app.measure('dashRateAdaptation', :samples =>1) |
| 82 | end |
| 83 | end |
| 84 | |
| 85 | |
| 86 | onEvent(:ALL_UP_AND_INSTALLED) do |event| |
| 87 | info "starting" |
| 88 | after 5 do |
| 89 | allGroups.startApplications |
| 90 | info "All applications started..." |
| 91 | end |
| 92 | after property.duration do |
| 93 | allGroups.stopApplications |
| 94 | info "All applications stopped." |
| 95 | Experiment.done |
| 96 | end |
| 97 | end |
| 98 | |
| 99 | #defGraph 'DashRate1' do |g| |
| 100 | # g.ms('dashRateAdaptation').select {[:oml_seq, :decisionRate_bps]} |
| 101 | #g.caption "Dash Rate Adaptation." |
| 102 | # g.type 'line_chart3' |
| 103 | # g.mapping :x_axis => :oml_seq, :y_axis => :decisionRate_bps |
| 104 | # g.xaxis :legend => 'time [s]' |
| 105 | # g.yaxis :legend => 'Decision Rate', :ticks => {:format => 's'} |
| 106 | #end |
| 107 | |
| 108 | #defGraph 'DashRate2' do |g| |
| 109 | # g.ms('dashRateAdaptation').select {[:oml_seq, :buffer_percent]} |
| 110 | #g.caption "VLC Buffer Percentage." |
| 111 | #g.type 'line_chart3' |
| 112 | #g.mapping :x_axis => :oml_seq, :y_axis => :buffer_percent |
| 113 | #g.xaxis :legend => 'time [s]' |
| 114 | #g.yaxis :legend => 'Buffer Percentage ', :ticks => {:format => 's'} |
| 115 | #end |
| 116 | |
| 117 | defGraph 'DashRate3' do |g| |
| 118 | g.ms('dashDlSession').select {[:oml_seq, :timeChunk_s]} |
| 119 | g.caption "read Chunk." |
| 120 | g.type 'line_chart3' |
| 121 | g.mapping :x_axis => :oml_seq, :y_axis => :timeChunk_s |
| 122 | g.xaxis :legend => 'time [s]' |
| 123 | g.yaxis :legend => 'read session [bps] ', :ticks => {:format => 's'} |
| 124 | end |
| 125 | |
| 126 | }}} |