Я использую библиотеку RTCMultiConnection в моем проекте NodeJs.Сценарий заключается в том, что пользователь "A"
инициирует трансляцию видео, а пользователь "B"
и "C"
присоединяется к этой трансляции.Так как это трансляция в один конец.Я добавил функцию чата, чтобы все могли общаться.Теперь проблема в том, что если пользователь "A"
отправляет сообщения, он получает все остальные "B & C"
, но если "B"
отправляет сообщение, которое он получил "A"
и то же самое происходит для пользователя "C"
.Сообщение должно быть доставлено всем пользователям независимо от того, кто их отправляет.Ниже код моей клиентской стороны
<script src="/dist/RTCMultiConnection.min.js"></script>
<script src="/node_modules/webrtc-adapter/out/adapter.js"></script>
<script src="/socket.io/socket.io.js"></script>
var enableRecordings = false;
var connection = new RTCMultiConnection();
connection.enableScalableBroadcast = true;
connection.maxRelayLimitPerUser = 1;
connection.autoCloseEntireSession = true;
connection.socketURL = '/';
connection.socketMessageEvent = 'scalable-media-broadcast-demo';
connection.connectSocket(function(socket) {
socket.on('join-broadcaster', function(hintsToJoinBroadcast) {
connection.session = hintsToJoinBroadcast.typeOfStreams;
connection.sdpConstraints.mandatory = {
OfferToReceiveVideo: !!connection.session.video,
OfferToReceiveAudio: !!connection.session.audio
};
connection.broadcastId = hintsToJoinBroadcast.broadcastId;
connection.join(hintsToJoinBroadcast.userid);
});
// this event is emitted when a broadcast is absent.
socket.on('start-broadcasting', function(typeOfStreams) {
console.log('start-broadcasting', typeOfStreams);
// host i.e. sender should always use this!
connection.sdpConstraints.mandatory = {
OfferToReceiveVideo: false,
OfferToReceiveAudio: false
};
connection.session = typeOfStreams;
// "open" method here will capture media-stream
// we can skip this function always; it is totally optional here.
// we can use "connection.getUserMediaHandler" instead
connection.open(connection.userid);
});
});
connection.onmessage = appendDIV;
document.getElementById('input-text-chat').onkeyup = function (e) {
if (e.keyCode !== 13) return;
// removing trailing/leading whitespace
this.value = this.value.replace(/^\s+|\s+$/g, '');
if (!this.value.length) return;
connection.send(this.value);
appendDIV(this.value);
this.value = '';
};
const chatContainer = document.querySelector('.chat-output');
function appendDIV(event) {
const div = document.createElement('div');
div.innerHTML = event.data || event;
chatContainer.insertBefore(div, chatContainer.firstChild);
div.tabIndex = 0;
div.focus();
document.getElementById('input-text-chat').focus();
}