Я работаю над приложением для видеозвонков и совместного использования экрана React. но звук не работает во время видеовызова и общего доступа к экрану.
Я добавил видео и аудио дорожки в RTCPeerConnection, оба добавили к нему, но работает только индекс 0, то есть когда я сначала добавляю голосовую дорожку, а затем работает и когда видео то видео работает
addMediaStreamTrack = async () => {
const { localMediaStream, rtcPeerConnection } = this.props
if (localMediaStream) {
await localMediaStream.getTracks().reverse().forEach((mediaStreamTrack) => {
rtcPeerConnection.addTrack(mediaStreamTrack);
});
}
}
this.rtcPeerConnection = new RTCPeerConnection({
iceServers: this.state.iceServers,
});
// here stun and turn server is used
Вот код для mediaSteam conf.
openCamera = async (fromHandleOffer) => {
const { mediaConstraints, localMediaStream } = this.state;
try {
if (!localMediaStream) {
let mediaStream;
if (this.wantCamera)
mediaStream = await navigator.mediaDevices.getUserMedia(
mediaConstraints
);
else
mediaStream = await navigator.mediaDevices.getDisplayMedia(
mediaConstraints
);
console.log(mediaStream.getTracks());
return fromHandleOffer === true
? mediaStream
: this.setState({ localMediaStream: mediaStream });
}
} catch (error) {
console.error("getUserMedia Error: ", error);
}
};
// and here is for handleOffer and handleAnswer
handleOffer = async (data) => {
const { localMediaStream, roomKey, socketID } = this.state;
const { payload } = data;
await this.rtcPeerConnection.setRemoteDescription(payload.message);
let mediaStream = localMediaStream;
if (!mediaStream) mediaStream = await this.openCamera(true);
// console.log(mediaStream.getTracks())
this.setState(
{ connectionStarted: true, localMediaStream: mediaStream },
async function () {
const answer = await this.rtcPeerConnection.createAnswer();
console.log(answer);
await this.rtcPeerConnection.setLocalDescription(answer);
const payload = await createPayload(roomKey, socketID, answer);
const answerMessage = await createMessage(TYPE_ANSWER, payload);
this.socket.send(JSON.stringify(answerMessage));
console.log(JSON.stringify(answerMessage));
}
);
};
handleAnswer = async (data) => {
const { payload } = data;
await this.rtcPeerConnection.setRemoteDescription(payload.message);
};
запутался, где мне не хватает и что?