I'm guessing this happens because in the default case
generateMediaConstraints() returns {video:true,audio:true} but when you're
fiddling with resolution and frame rate you're omitting the audio property.

*Andreas Pehrson *--- Software Engineer

(+47) 959 60 374   |   [email protected]   |
www.telenordigital.com

On Tue, Jun 16, 2015 at 3:00 PM, <[email protected]> wrote:

> 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
>
_______________________________________________
dev-media mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-media

Reply via email to