Estoy tratando de hacer una llamada usando la biblioteca peerJs. En mi aplicación, tengo 2 tipos de usuarios: Client y Streamer . Solo los clientes pueden llamar a los streamers. Y cuando el cliente llama, emite solo un flujo audio , y el transmisor necesita emitir un flujo de audio y video ; Entonces, lo que estoy haciendo es lo siguiente:
parte en mi componente Cliente:
public peer; public outGoingCall; public incomingStream = new BehaviourSubject(null); ngOnInit() { this.peer = new Peer(); } public callToPeer(peerId, localClientStream) { this.outGoingCall = this.peer.call(peerId, localClientStream); this.outGoingCall.on('stream', (remoteStream: MediaStream) => { console.log('incoming stream from streamer ', remoteStream); // so here in console I see incoming stream and it is active; // but when I apply it in video tag I don't see anything! Why? this.incomingStream.next(remoteStream); }); }Archivo HTML para el componente Cliente:
<div class="call-holder" *ngIf="incomingStream | async as stream"> <video [srcObject]="stream" autoplay></video> ... </div>aquí el código del componente Streamer:
public peer; public clientsCall; public incomingClientsStream = new BehaviourSubject(null); ngOnInit() { this.peer = new Peer('streamer-1'); // exact id for this streamer; this.peer.on('call', (mediaCon) => { console.log('incoming call from Client'); // Allow only a single media if (this.clientsCall && this.clientsCall.open) { mediaCon.close(); } mediaCon.on('stream', (streamFromClient: MediaStream) => { console.log('stream from client ', streamFromClient); this.incomingClientsStream.next(streamFromClient); }); mediaCon.on('close', (some) => { console.log(some); console.log('client closed connections'); }); this.clientsCall = mediaCon; }); } public answerTheCall() { navigator.mediaDevices.getUserMedia({audio: true, video: true}) .then((localStream) => this.clientsCall.answer(localStream)); }en el archivo HTML de streamers escucho el audio que viene del cliente y funciona:
<div *ngIf="(incomingStream | async) as clientStream"> <audio [srcObject]="clientStream" autoplay></audio> </div>Entonces, la cuestión es que, cuando respondo la llamada de un cliente y le envío mi transmisión local, puedo verla desde la página del Streamer pero no en la página de Clientes. ¿Por qué? ¿Por qué no recibo la transmisión de streamer?