Después de algunas horas de investigación no puedo encontrar una solución a mi problema y parece imposible.
Construí un chat WebRTC simple (2 clientes) donde puedes crear/unirte a una sala.
Cuando dos clientes se unen a la misma habitación pueden hablar entre ellos. Tengo un localStream que es la cámara del usuario local y un remoteStream que es la otra cámara cliente de PeerConnection.
Creé un botón que me permite iniciar una grabación (local) del video de remoteStream. Entonces mi cliente 1 presiona este botón y comienza a grabar el video del cliente 2.
Mi problema es cuando verifico los datos de video del control remoto. La velocidad de fotogramas y la resolución del video cambian con el tiempo. Cuando empiezo a grabar MediaRecorder, tome el tamaño actual de RemoteStream y cree un blob que contenga mi video. Más tarde puedo descargar este video deteniendo la grabación y descargando el blob. El problema es que el tamaño (definición) del video final dependerá del tamaño actual de RemoteStream cuando el usuario haga clic en el botón.
Entonces, si no tenemos suerte, obtendremos un video completo de 360p, por ejemplo, si comenzamos la grabación más tarde, podemos tener un video de 1000p o 868p u otro valor aleatorio entre 1p y 2160p. Entonces, el tamaño del video dependerá del tiempo y nunca será el mismo.
¿Es posible crear una grabación que tome un tamaño de video fijo e ignore esta fluctuación de WebRTC?
Saludos
WebRTC implementa el control de congestión: el tamaño, la velocidad de fotogramas y la calidad del video varían según las condiciones de la red (pérdida de paquetes y retraso de paquetes).
Hay algunas perillas para controlar el comportamiento. El que he encontrado más útil es el campo contentHint de MediaStreamTrack ; si establece este campo en el detail de la cadena, la pila preferirá reducir la velocidad de fotogramas en lugar de reducir la resolución.
Sin embargo, al final del día, no parece haber nada que pueda hacer para evitar por la fuerza que la pila reduzca la resolución cuando las condiciones de la red son malas, por lo que su código deberá manejar ese caso.