2017-08-04 2 views
4

je la configuration suivante:utilisation élevée du processeur avec RTCPeerConnections

enter image description here

L'idée est que l'ordinateur A capture une seule MediaStream locale de Cam 1 en utilisant getUserMedia. Deux RTCPeerConnections sont ensuite créées localement - R5Outbound et R6Outbound. L'ordinateur B et l'ordinateur C créent leur propre RTCPeerConnections entrantes pour capturer ce flux. Je remarque que l'ordinateur A - avec un processeur i7 - est très chaud et bloque occasionnellement mon instance de Chrome (60) avec la configuration ci-dessous après avoir atteint 95% + CPU. Après quelques lectures, je commence à penser que je crée trop d'instances de RTCPeerConnection ici; Cependant, avec plusieurs flux provenant d'un seul périphérique dans certains cas, je suis un peu confus sur la façon de créer et de gérer correctement mes RTCPeerConnections. Ma question est - étant donné la topologie ci-dessus et l'exigence que tous les ordinateurs ont besoin de voir tous les flux (bien que certains ordinateurs puissent ne pas avoir de flux à partager), quel RTCPeerConnections devrait être créé?

Je devrais noter que le maillage est nécessaire pour l'instant; contraintes d'affaires nous avons hâte, mais incapable d'utiliser une architecture MCU ou SFU.

Quelques réponses aux questions:

Combien de RAM et d'espace disque est disponible sur l'ordinateur A?

16 Go /> 1 To SSD.

Pourquoi deux flux sortants sont-ils nécessaires sur l'ordinateur A? Quel est le but de deux flux sortants?

Ordinateur A est équipé de deux caméras. Un flux par caméra est capturé. Chaque flux est ensuite partagé avec chaque autre ordinateur.

Copiez-vous le flux d'origine pour fournir MediaStream pour R5Outbound et R6Outbound?

Les deux R5.O et R6.O utilisent la même instance MediaStream (je le dis avec confiance de 80% - besoin de vérifier mon code et republier).

+0

Pouvez-vous inclure un [Comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) de code à reproduire le problème à la question? – guest271314

Répondre

1

Pour un réseau maillé, vous avez la bonne idée. Le problème que vous rencontrez est que le transfert de MediaStreams entre des connexions homologues est une opération coûteuse. Dans un réseau maillé, pour chaque connexion homologue que vous effectuez, vous téléchargez votre MediaStream et téléchargez un MediaStream. Vous pouvez optimiser ceci avec un serveur intermédiaire auquel tous les clients parlent (au lieu de parler directement les uns aux autres). Voici une vidéo pour plus d'informations sur ce à quoi cela ressemble: https://vimeo.com/198382135