С Twilio: отключение звука определенного участника в комнате

Я много искал и много чего пробовал. Возьмем тот же сценарий из этого вопроса.

Боб, Алиса и Джейн участвуют в конференции. Я хочу, чтобы Боб (хозяин комнаты) мог отключать звук Алисы, чтобы звуки Алисы не проходили через комнату, а < strong> Алиса по-прежнему слышит звуки от всех остальных участников (Боб и Джейн)

Представьте себе сценарий, когда вы находитесь на конференции, и кто-то мешает прямой трансляции. Поэтому я хочу, чтобы хостер мог отключить или удалить звуковую дорожку этого человека.

Пока что я могу отключить звуковые дорожки для локального участника с помощью:

$(document).on("click",'.mute-audio',function(){
    if(room){
        let microEnabled = true;
        microEnabled = !microEnabled;
        room.localParticipant.audioTracks.forEach(function(audioTrack) {
            audioTrack.enable(microEnabled);
        });
    }
});

Мы просто перебираем аудиодорожки локального участника, и если я хочу сделать это для конкретного пользователя, мне просто нужно знать его identity, и я готов:

$(document).on("click",'.mute-user',function(){
    var identity = $(this).data('identity'); // i.e the unique ID USER2323
    if(room){
        var user_to_mute;


        room.participants.audioTracks.forEach(function(participant) {
            audioTrack.enable(microEnabled);
            user_to_mute = participant;
            // We retrieve the target
            return;
        });

        let m_Enabled = true;
        m_Enabled = !m_Enabled;
        if(user_to_mute){
            user_to_mute.audioTracks.forEach(function(audioTrack) {
                audioTrack.enable(m_Enabled);
                // the error is here I think
                return;
            });
        }
    }
});

Но это не работает, при попытке я получил эту ошибку в браузере

TypeError: audioTrack.enable is not a function

person Lemayzeur    schedule 31.07.2018    source источник


Ответы (1)


Мне кажется, что это какие-то ошибки при копировании и вставке, но, не будучи знаком с API, я делаю несколько предположений:

$(document).on("click",'.mute-user',function(){
  var identity = $(this).data('identity'); // i.e the unique ID USER2323
  if(room){
    var user_to_mute;
    // in the next line, we remove .audioTracks, since it looks like
    // you want to iterate over participants, and removed audioTrack.enable
    // since it's not defined yet
    room.participants.forEach(function(participant) {
        if (identity == participant.identity) {
            // We retrieve the target
            user_to_mute = participant;
            return;
        }
    });

    let m_Enabled = true;
    m_Enabled = !m_Enabled;
    if(user_to_mute){
        user_to_mute.audioTracks.forEach(function(audioTrack) {
            audioTrack.enable(m_Enabled);
            return;
        });
    }
  }
});
person dave    schedule 01.08.2018
comment
Нет, это не копирование / вставка. это должно работать. room.participants.forEach(function(participant) { будет перебирать массив участников, когда я получу participant.identity, который сопоставляет код. Назначаю user_to_mute. а затем я перебираю user_to_mute.audioTracks, а затем включаю / отключаю audio, как четко указано в документе. Кажется, что эта опция доступна только для локального участника, а не для удаленных участников. - person Lemayzeur; 01.08.2018