Bonjour � vous,

Je suis actuellement stagiaire chez un gros op�rateur t�l�com (pour ne pas le citer).
Mon sujet consiste � �valuer les performances de la technologie WebRTC sur les browsers Firefox et Chrome.
J'ai d'abord �tudi� le fonctionnement de l'application Firefox Hello pour comprendre ce qu'est la technologie WebRTC, voir son fonctionnement, l'�change de m�dia etc.

Puis j'ai commenc� mon �tude en utilisant le site https://apprtc.appspot.com/ sur les 2 browsers, afin de comparer le comportement de chaque browser sur une m�me plateforme webRTC. Jusque l� aucun probl�me majeur, si ce n'est que je ne ma�trise pas l'injection de contenu, le d�bit audio/vid�o et les codeurs choisis pour les streams. Car il faut savoir que Chrome comme Firefox bride le d�bit vid�o aux alentours de 2,2Mb/sec. Cela a un int�r�t pour ne pas surcharger une connexion, seulement il est peut-�tre possible d'avoir une qualit� meilleure en d�bridant le d�bit et en utilisant un codeur moins gourmand (le VP8 �tant le codeur syst�matiquement s�lectionn� par les appli).

Une formation a �t� donn�e � mes coll�gues afin de pouvoir d�velopper sa propre application WebRTC en javascript, assez minimaliste mais qui permet de g�rer de bout-en-bout toutes les contraintes m�dias. Je peux ainsi injecter du contenu HD-1080p d'un c�t� de la com', d�brider le d�bit � une valeur que je ma�trise et obtenir en restitution la m�me r�solution. Je pr�cise toutefois que cette application a �t� utilis�e en premier sur Chrome.
A chaque fois je modifie le contenu du SDP afin de pouvoir g�rer le d�bit :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
localSDP.sdp = localSDP.sdp.replace( /a=mid:video\r\n/g , 'a=mid:video\r\nb=AS:4000\r\n');
Ici je bride le d�bit vid�o � 4Mb/sec.

J'ai pu donc r�aliser toutes mes manipulations sans probl�me sur Chrome. Mais il me faut pouvoir comparer mes r�sultats avec un autre codeur vid�o.
Sur Mozilla Firefox, le codeur H.264 est g�r�. Par cons�quent je modifie le code source de mon appli javascript afin de forcer dans le SDP le choix du codeur H.264 � la place du VP8 :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
localSDP.sdp = localSDP.sdp.replace( / 120 126 /g,' 126 ');
Ici, je remplace dans le SDP le codeur VP8 (identifi� par le code 120) par le codeur H.264 (identifi� par le code 126).
Je fais de m�me pour le codeur audio G.722 � la place du opus.
Si forcer les codeurs ne pose aucun probl�me, c'est la partie des media-stream qui devient compliqu�e sur Firefox.
En effet, si j'injecte du contenu 1080p mais que je ne modifie pas la r�solution dans l'application pour une transmission 1080p de bout-en-bout, je me retrouve avec un affichage vid�o downscal� en 640x480. Peu importe le contenu inject�, il sera transmit en 640x480.
Mais si je modifie la r�solution pour une transmission 1080p (par exemple), j'ai un affichage 1080p mais je perds le stream audio.
D'ailleurs, au lancement de la com' le browser ne me demande m�me pas de partager mon micro si je modifie la r�solution.

Pour expliquer un peu comment fonctionne l'application je donne quelques bouts de code (Je ne peux fournir le code en entier, n'�tant pas le d�veloppeur de l'appli) :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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}
	}
}
J'ai essay� de placer la variable audio dans une des sous-conditions de la fonction, par exemple dans celle-ci :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
else if(replaceResolution == true && replaceFPS == false && replaceRatio == false){
Je peux effectivement obtenir mon stream audio mais je ne peux plus modifier la r�solution.
Donc soit c'est tout l'un, soit c'est tout l'autre. Je n'arrive pas � comprendre pourquoi et/ou comment.
Les coll�gues qui ont d�velopp� cette application ne sont plus disponibles. Je suis tr�s mauvais en dev et je n'ai aucune logique niveau algo... Ca fait 1 semaine que je bloque sur ce probl�me, je ne vois pas comment faire. Certes j'ai encore 1 mois et demi de stage mais j'aimerais ne pas perdre trop de temps l�-dessus, surtout que j'ai des r�sultats � fournir.

Pourriez-vous m'aider � trouver solution � mon probl�me ?

Cdlt,

dulquen.