Hi,

I'm an intern of a well-known telecommunication french operator. 
The subject of my intership is evaluating the WebRTC technology's performances 
through google Chrome and Mozilla Firefox.
First I studied how work this technology with Firefox Hello, to understand what 
is WebRTC, how it works, how media-stream are exchanged etc. 

Then I started to work with the website https://apprtc.appspot.com/ On chrome 
and Firefox, to compare the behavior of every brower through the same webRTC 
app. Till now everything was good except the fact that I didn't master content 
injection (video resolution), the A/V bitrate and A/V encoders. 'caus as you 
know it, the video bitrate is blocked around 2Mb/sec. And we would like to see 
if it's possible to unleash the video bitrate to have a better quality and by 
using another less greedy encoder (VP8 ? H.264?)

A formation was given to my colleagues to develop their own WebRTC app using 
javascript language. It allows us to manage all parameters of a WebRTC 
communication (media constraints etc.). So now I can inject 1080p content into 
the communication, unleash the bitrate, manage the displayed resolution. Just 
to specify, I used Chrome first. 
Anytime I modify the content of the SDP packet to manage de max bitrate :

localSDP.sdp = localSDP.sdp.replace( /a=mid:video\r\n/g , 
'a=mid:video\r\nb=AS:4000\r\n');

So I could therefore make my own tests without any problems on Chrome. But I 
have to compare my results with another A/V encoder for subjectives tests.
On Mozilla Firefox, the H.264 encoder works, even if it's not selected by 
default into a WebRTC communication (using Firefox Hello or apprtc). So I 
modify the content of the SDP packet to force the choice of the A/V encoder 
(replacing VP8 with H.264):

localSDP.sdp = localSDP.sdp.replace( / 120 126 /g,' 126 ');

I can do the same thing to replace the opus encoder with the G.722 encoder. 
If forcing A/V encoders works without problems, the media-stream parts are 
giving me headaches. In fact, if I inject 1080p content (with Firefox 
obviously) during a WebRTC app, the resolution in return has been downscaled to 
640x480. And it doesn't depends on the resolution injected, even if the source 
resolution is smaller than 640x480, what I see in output is 640x480. But if I 
modify the displayed resolution, it's good in output but I lose the audio 
stream. As a matter of fact, till i try to modify the resolution, when the 
communication begin, the browser doesn't ask me to share the microphone.

To explain a bit more how work the app I use, i give you some sourcecode (not 
all because i didn't develop it, so I can't share all the code) :

var mediaConstraints = {video:true,audio:true};
[...]
mediaConstraints = generateMediaConstraints();
[...]
function generateMediaConstraints(){
        if (replaceResolution == true && replaceFPS == true && replaceRatio == 
true){
                return {
                            video: {
                                mandatory: {
                                    maxWidth: userMaxWidht.value,
                                    maxHeight: userMaxHeight.value,
                                    minWidth: userMinWidht.value,
                                    minHeight: userMinHeight.value,
                                                                        
maxAspectRatio: userRatio.value,
                                                                        
minAspectRatio: userRatio.value,
                                                                        
minFrameRate: userFPS.value,
                                                                        
maxFrameRate: userFPS.value
                                    }
                            }
                        };
        }
        else if(replaceResolution == true && replaceFPS == true && replaceRatio 
== false){
                return {
                            video: {
                                mandatory: {
                                    maxWidth: userMaxWidht.value,
                                    maxHeight: userMaxHeight.value,
                                    minWidth: userMinWidht.value,
                                    minHeight: userMinHeight.value,
                                                                        
minFrameRate: userFPS.value,
                                                                        
maxFrameRate: userFPS.value
                                    }
                            }
                        };
        }
        else if(replaceResolution == true && replaceFPS == false && 
replaceRatio == true){
                return {
                            video: {
                                mandatory: {
                                    maxWidth: userMaxWidht.value,
                                    maxHeight: userMaxHeight.value,
                                    minWidth: userMinWidht.value,
                                    minHeight: userMinHeight.value,
                                                                        
maxAspectRatio: userRatio.value,
                                                                        
minAspectRatio: userRatio.value
                                    }
                            }
                        };
        }
        else if(replaceResolution == true && replaceFPS == false && 
replaceRatio == false){
                return {
                            video: {
                                mandatory: {
                                    maxWidth: userMaxWidht.value,
                                    maxHeight: userMaxHeight.value,
                                    minWidth: userMinWidht.value,
                                    minHeight: userMinHeight.value
                                    }
                            }
                        };
        }
        else if(replaceResolution == false && replaceFPS == true && 
replaceRatio == true){
                return {
                            video: {
                                mandatory: {
                                                                        
maxAspectRatio: userRatio.value,
                                                                        
minAspectRatio: userRatio.value,
                                                                        
minFrameRate: userFPS.value,
                                                                        
maxFrameRate: userFPS.value
                                    }
                            }
                        };
        }
        else if(replaceResolution == false && replaceFPS == true && 
replaceRatio == false){
                return {
                            video: {
                                mandatory: {
                                                                        
minFrameRate: userFPS.value,
                                                                        
maxFrameRate: userFPS.value
                                    }
                            }
                        };
        }
        else if(replaceResolution == false && replaceFPS == false && 
replaceRatio == true){
                return {
                            video: {
                                mandatory: {
                                                                        
maxAspectRatio: userRatio.value,
                                                                        
minAspectRatio: userRatio.value
                                    }
                            }
                        };
        }
        else{
                return {video:true,audio:true}
        }
}

I tried to put the audio variable into one of the subconditions' function, ie : 
else if(replaceResolution == true && replaceFPS == false && replaceRatio == 
false){...}

It works because the audio stream work, but I can't manage the resolution 
anymore. I don't underderstand why and how.
Colleagues who développed this app left the compagny. I'm a really ban 
developper (well, I'm not a dev). I'm blocked on this f****** since one week. I 
don't see what to do. 
Could you please help me to fix that ? maybe give me the solution I dunno.

Thanks in advance.
_______________________________________________
dev-media mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-media

Reply via email to