async getStreamSFUServer() {
this.streamingService.returnConsumer().subscribe(async (consumerResponse: any) => {
const device = new Device();
const consumer = JSON.parse(consumerResponse);
const routerRtpCapabilities = consumer.rtpCapabilities;
await device.load({routerRtpCapabilities});
// consumer.transportOptions.iceServers = iceServers.iceServers;
const receiveTransport = await device.createRecvTransport(consumer.transportOptions);
console.log("consumer.producer_id 1");
console.log(consumer.producer_id);
console.log("receiveTransport 1");
console.log(receiveTransport);
This is the console.log(receiveTransport):
receiveTransport.on('connectionstatechange', (state) => {
console.log("connectionstatechange 1");
console.log(state);
if (state === 'failed' || state === 'closed') {
// Handle transport failure
console.log("connectionstatechange failure 1");
}
});
// receiveTransport.on('transportclose', () => {
// // handle the "connect" event
// });
// receiveTransport.on('trackended', () => {
// // handle the "connect" event
// });
// receiveTransport.on('connect', () => {
// // handle the "connect" event
// });
// receiveTransport.on('connect', () => {
// // handle the "connect" event
// });
// receiveTransport.on('connect', () => {
// // handle the "connect" event
// });
await new Promise<void>(async (resolve) => {
try {
receiveTransport.on('connect', ({ dtlsParameters }, callback) => {
console.log('dtlsParameters receiver');
console.log(dtlsParameters);
callback();
});
console.log('before resolve Consume');
resolve();
} catch (Exception) {
console.log('Exception Mediasoup Consume');
console.log(Exception);
}
});
console.log('consumer receiver');
console.log(consumer);
this.streamingService.consumerConsume({transportId: consumer.producer_id, });
this.streamingService.returnConsumerConsume().subscribe(async (consumer: any) => {
console.log('consumer receiver subscribe');
console.log(consumer);
const consumerTransport = await receiveTransport.consume(({
id: consumer.id,
producerId: consumer.producerId,
rtpParameters: consumer.rtpParameters,
kind: consumer.kind
}));
console.log('consumerTransport receiver');
console.log(consumerTransport);
const mediaStream = new MediaStream();
console.log("consumer.track 1 22 43333");
console.log(consumerTransport.track);
consumerTransport.track.enabled = true;
consumerTransport.on('@getstats', (getstats) => {
console.log("getstats on event");
console.log(getstats);
});
const rtpReceiver = consumerTransport.rtpReceiver;
console.log("rtpReceiver");
console.log(rtpReceiver);
const statsReport = await rtpReceiver.getStats();
statsReport.forEach((report) => {
Never print any console.log().
if (report.type === 'inbound-rtp') {
console.log(`Bytes received: ${report.bytesReceived}`);
console.log(`Packets received: ${report.packetsReceived}`);
console.log(`Packets lost: ${report.packetsLost}`);
}
});
console.log("this.streamVideo");
console.log(this.streamVideo);
const supportedCodecs = [
'video/webm; codecs="vp8, opus"',
'video/mp4; codecs="avc1.4d401f, mp4a.40.2"',
'video/ogg; codecs="theora, vorbis"'
];
if (MediaSource.isTypeSupported(supportedCodecs[0])) {
console.log('vp8 codec is supported');
} else {
console.log('vp8 codec is not supported');
}
mediaStream.getTracks().forEach((track) => {
if (track.kind === "video") {
console.log("MediaStream contains video track.");
mediaStream.addTrack(track);
}
if (track.kind === "audio") {
console.log("MediaStream contains audio track.");
mediaStream.addTrack(track);
}
});
It return well: vp8 codec is supported
this.streamVideo.nativeElement.srcObject = mediaStream;
this.streamVideo.nativeElement.autoplay = true;
this.streamVideo.nativeElement.muted = false; // This doesn't work
muted is true, this.streamVideo.nativeElement.muted = false; doesn’t work
this.streamVideo.nativeElement.play();
});
});
}
Back end for consumer:
How i create a consumer:
async createConsumer(stream: any) {
try {
const transport = await this.createTransportForRouter(this.stream.get(stream.indexWorker).router, this.stream.get(stream.indexWorker).server);
// Get the supported RTP capabilities
const rtpCapabilities: mediasoup.types.RtpCapabilities = this.stream.get(stream.indexWorker).router.rtpCapabilities;
const producterId = stream.producer_id;
console.log("producterId hhhhhhhhhhhhhhhhhhhhhhhh");
console.log(producterId);
const canConsume = await this.stream.get(stream.indexWorker).router.canConsume({producerId: stream.producer_id, rtpCapabilities: rtpCapabilities});
console.log("canConsume");
console.log(canConsume);
can consumer return true
console.log("transport.id consumer");
console.log(transport.id);
this.transports.set(transport.id, transport);
const transportOptions = {
id: transport.id,
iceParameters: transport.iceParameters,
iceCandidates: transport.iceCandidates,
dtlsParameters: transport.dtlsParameters,
};
return {
producerId: stream.producer_id,
type: "consume",
rtpCapabilities: rtpCapabilities,
transport: transport,
transportOptions: transportOptions,
};
} catch (Exception) {
console.log("createConsumer Exception");
console.log(Exception);
}
}
When transport connect is triggered:
async consumerTransportConnect(transportConnect) {
try {
await this.transports.get(transportConnect.transportId).connect({dtlsParameters: transportConnect.dtlsParameters});
} catch (Exception) {
console.log("Exception");
console.log(Exception);
}
}
async consumerConsume(transportConnect) {
try {
console.log('consumerConsume');
console.log('transportConnect.transportOptions.id');
console.log(transportConnect.transportOptions.id);
const consumerTransport = await this.transports.get(transportConnect.transportOptions.id);
// transport can now consume and return a consumer
const consumer = await consumerTransport.consume({
producerId: this.rooms.get(transportConnect.streaming_id).producer.id,
rtpCapabilities: transportConnect.rtpCapabilities,
paused: true,
});
consumer.on('transportclose', () => {
console.log('transport close from consumer');
});
consumer.on('producerclose', () => {
console.log('producer of consumer closed');
});
this.consumers.set(consumer.id, consumer);
// to send back to the Client
const params = {
id: consumer.id,
producerId: this.rooms.get(transportConnect.streaming_id).producer.id,
kind: consumer.kind,
rtpParameters: consumer.rtpParameters,
userId: transportConnect.user_vieawer_id,
clientId: transportConnect.clientId
}
this.publisher.publish('returnConsumerConsume', JSON.stringify(params));
} catch (Exception) {
console.log("Exception");
console.log(Exception);
}
}