Текстовый чат в масштабируемой трансляции (WebRTC) - PullRequest
0 голосов
/ 10 марта 2019

Я использую библиотеку 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();
}
...