Опенток, видеозвонок и идентификатор абонента - PullRequest
0 голосов
/ 11 марта 2019

Я интегрировал сеанс видеовызова OT в свой угловой 6.

Это код потока издателя

    const publisher = OT.initPublisher('publisher', {
     name: 'pubname',
  style: { 'buttonDisplayMode': 'off'},
  insertMode: 'append',
  width: '100%',
  fitMode: 'contain',
  height: '100%'
  });

Это код потока абонента:

session.subscribe(event.stream, dup_div, {
  insertMode: 'append',
  name:'subname',
 style: { 'buttonDisplayMode': 'off'},
width: '100%',
fitMode: 'contain',
height: '100%'
});

Это работает нормально.У меня есть 4 подписчика в моем потоке.Если так, я хочу получить, Кто говорит.То есть, если подписчик 1 задает вопрос, то другие должны получить, что подписчик1 говорит.Поэтому я хочу получить идентификатор подписчика, который говорит.Как я могу получить это, используя captureStream() или getAudioTracks().

Пожалуйста, помогите мне найти это.Я не получил никаких примеров или примеров кода по этому поводу.

1 Ответ

0 голосов
/ 12 марта 2019

Здесь есть несколько вариантов, о которых я могу подумать.

  1. Вы можете использовать События подписчика «audioLevelUpdated» , и если они превышают пороговое значение, вы говорите, что пользователь говорит. Что-то вроде:

    const subscriber = session.subscribe(stream);
    subscriber.on('audioLevelUpdated', () => {
      if (movingAvg === null || movingAvg <= event.audioLevel) {
        movingAvg = event.audioLevel;
      } else {
        movingAvg = 0.7 * movingAvg + 0.3 * event.audioLevel;
      }
    
      // 1.5 scaling to map the -30 - 0 dBm range to [0,1]
      let logLevel = (Math.log(movingAvg) / Math.LN10) / 1.5 + 1;
      logLevel = Math.min(Math.max(logLevel, 0), 1);
      if (logLevel > 0.5) {
        // They are speaking, do whatever you need to do here
      }
    });  
    
  2. Вы можете использовать библиотеку hark.js , в которой уже есть полезные «говорящие» события, и затем отправлять эти события другим участникам.

    const publisher = OT.initPublisher();
    // Create a new MediaStream with the audio track from the Publisher
    const mediaStream = new MediaStream([publisher.getAudioSource()]);
    const speech = hark(mediaStream, options);
    speech.on('speaking', () => {
      // They are speaking
      session.signal({ type: 'speaking'});
    });
    const subscribersByConnectionId = {};
    session.on('streamCreated', (event) => {
      const subscriber = session.subscribe(event.stream);
      subscribersByConnectionId[event.stream.connection.connectionId] = subscriber;
      subscriber.on('destroyed', (event) => {
        delete subscribersByConnectionId[event.stream.connection.connectionId];
      });
    });
    session.on('signal:speaking', (event) => {
      const subscriberSpeaking = subscribersByConnectionId[event.from.connectionId];
      // Do whatever you want with the subscriber that is speaking
    });
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...