'''[wiki:WiMAX/WiMAX-Tutorial/Dash/02 Previous]''' == OMF Application Wrapper == Other pieces of software related to the OMF experiment need to be installed on the OMF console (that is, they should be in your home directory on the console). These include the OMF application wrapper and the OMF experiment script. When an OML-enabled application is run using OMF, the application itself is installed on the resource and a simple [https://mytestbed.net/projects/omf/wiki/BasicTutorialStage3-5-2 OMF application wrapper] is installed on the console where the OMF Experiment Controller runs. This wrapper just gives some basic information about the application, the parameters that can be passed at the command line, and the OML measurement points that have been defined in the application. The application wrapper for the OML-enabled VLC DASH is given here as an example: {{{ #!ruby defApplication('vlc-dash') do |app| app.path = "/usr/local/bin/vlc" app.version(2, 1, 0) app.shortDescription = "VLC" app.description = "VLC multimedia player and streamer" app.defProperty("input", "Stream input (e.g. file or network address)", nil, {:type => :string, :dynamic => false, :use_name => false}) app.defProperty("sout", "Stream output", "--sout", {:type => :string, :dynamic => false,}) app.defProperty("intf", "Main interface module", "--intf", {:type => :string, :dynamic => false}) app.defProperty("extraintf", "Extra interface module(s). Use --extraintf omlstats to enable OML", "--extraintf", {:type => :string, :dynamic => false}) app.defProperty("mtu", "Specifies the MTU of the network interface", "--mtu", {:type => :string, :dynamic => false}) app.defProperty("quiet", " Deactivates all console messages", "--quiet", {:type => :boolean, :dynamic => false}) app.defProperty("play-and-exit", "Exit VLC after playing all the items in the input stream list", "--play-and-exit", {:type => :boolean, :dynamic => false}) app.defProperty("redirect", "Redirect stdout and stderr to /dev/null", " > /dev/null 2>&1", {:type => :boolean, :dynamic => false, :order => 100}) app.defMeasurement('dashRateAdaptation') do |mp| mp.defMetric('chosenRate_bps',:int) mp.defMetric('empiricalRate_bps',:int) mp.defMetric('decisionRate_bps',:int) mp.defMetric('buffer_percent',:int) end app.defMeasurement('dashDlSession') do |mp| mp.defMetric('chunkCount',:int) mp.defMetric('readSession_B',:int) mp.defMetric('readChunk_B',:int) mp.defMetric('timeSession_s',:float) mp.defMetric('timeChunk_s',:float) end end }}} Note that two '''measurement points''' will be registered by the VLC DASH player. One of these, the '''dashRateAdaptation''' MP, records a data point each time a decision is made about what rate to download the next segment at. This data point includes the ''chosenRate'' (the rate that the DASH client actually requests), the ''empiricalRate'' (the rate observed by the client while downloading the previous segment), the ''decisionRate'' (the value that the client uses as the ''perceived available bitrate'' we described earlier), and the ''buffer_percent'' (which describes what percent of the 30-second buffer is full). A second MP, the '''dashDlSession''' MP, records a data point each time a {{{socket recv}}} call is made to retrieve some part of a video segment. This data point includes the sequence number of the video segment, the total number of bytes read by the DASH client over all video segments, the number of bytes read by the DASH client for the current video segment, the time spent in {{{socket recv}}} calls over the entire DASH client session, and the time spent in {{{socket recv}}} during the download of the current video segment. '''[wiki:WiMAX/WiMAX-Tutorial/Dash/04 Next]'''