== Introduction ==
This efforts aims at building tools and frameworks framework for analyzing audio and video
quality for the Firefox WebRTC implementation. WebRTC involves peer-to-peer rich multimedia
communications across variety of end-user devices and network conditions. The
== Background ==
=== Typical WebRTC Media Pipeline===
<p>Below picture captures various components involved in the flow of
media captured from mic/camera till it gets transported. The reverse direction
follows a similar path back till the RTP packets gets delivered as raw media for
rendering.</p>
[[File:Firefox_WebRTC_Pipeline.png|650px]]
<p>With several moving components in the pipeline, it becomes necessary to analyze
the impact these might have on the overall quality of the media being transmitted
or rendered. For instance, the parts of the pipeline highlighted ( marked star)
has potential to induce latency and impact quality of the encoded media. Thus,
having possibilities to measure, analyze and account these impact has potentialimpacts can helpto improve the performance of the Firefox WebRTC implementation.</p>
<p>Not to forget, the pipeline in the diagram, doesn't capture impacts of latency on induced due to the network bandwidth, latency and congestion scenarios. </p>
=== Scope ===
Following is wishlist of functionalities that the framework must be able to support
eventually.
# Audio and Video Quality Analysis
#Codec Configuration Variability Analysis
## Sample Rate, Input and Output Channels, Reverse Channels, Echo Cancellation, Gain Control, Noise Suppression, Voice Activity Detection, Level Metrics, Delay, Drift compensation, Echo Metrics
## Video Frame-rate, bitrateBitrate, resolutionsResolution and more
#Hardware and Platform Variability Analysis
[[File:AudioPerf-Setup.png|650px]]
<p>The idea here is to setup 2 Peer Connections within a single instance of the browser tab to setup a one-way audio call.Finally compute PESQ scores between the input audio file fed into the local Peer Connection andthe output audio audio file recorded at the play-out of the remote Peer Connection in a fully automated fashion.</p>
<p>Following sub-sections explain in details the steps involved for this purpose: </p>
==== Running Browser Based Media Test Automatically ====
<p>[[Talos]] is Mozilla's python performance testing framework that is usable on Windows, Mac and Linux.
<p>Talos is used in our setup to run media tests along with other start-up and page-loader performance tests.</p>
==== Feeding output of <audio> to the Peer Connection ====
<p>Once we have the framework figured out to run automated media-tests, the next step is deciding on how do we insert input audio file into the WebRTC Peer Connection.</p> <p>For this purpose Mozilla's MediaStreamProcessing API '''mozCaptureStreamUntilEnded''' enables the <audio> element to produce MediaStream that consists of whatever the <audio> element is playing. Thus the stream produced by the <audio> element in this fashion replaces the function of obtaining the media stream via the WebRTC GetUserMedia API. </p><p>Finally,the generated MediaStream is added to the local Peer Connection element via the addStream() API as shownbelow.</p>
<code>
// localAudio is an <audio> , localPC is a PeerConnection Object
*A way a feeding audio from an input audio file audio input to the Peer Connection without having to use the GetUserMedia() API
</p>
<p> This sub-section explains various tools used to choose the right audio sink, record the audio played out and computethe PESQ scores </p>
#PulseAudio's pactl tool is used to find the right sink to play-out the audio produced by the remote Peer Connection.
#PulseAudio's parec tool records mono channel audio played out at the sink in Signed Little Ending format at 16000 samples/sec.
#The output from the parec tool is fed into the SOX tool to generate .WAV version of the recorded audio and to trim silence at the beginning and end of the recorded audio file. <br> <br>
<code>
Command:
</code>
<br>
The recording is timed to match the length of the input audio file using SOX's trimming effects. This enables the recorderprocess to auto-complete on the SOX trim timeout expiry determined by the <record-duration>
#Finally PESQ is used to compute the quality scores between the input audio file (original) and the output audio file (recorded) <br> <br>
<code>
==== TODO Feature List ====
These are Some near term things, if implemented, would improve the frameworkitems to implement/support include:
#Support different audio formats and lengths
#Provide tools support across platforms. Currently we support LINUX only
#Discuss the results generated and DataZillaDatazilla, GraphServer integration
#Allow configuration options to specify sample rates, number of channels and encoding.
==Next Steps ==# Discuss and fix open issues related to use Talos Setup/Cleanup framework to better control Audio Recodring Process.# Discuss on what more tests are required for audio quality and latency analysis# Discuss on what needs to be done for Video Performance Quality Analysis Framework ==Not yet Supported# Extend the framework to simulate Constrained networked conditions.