Opentok React: Как вызвать метод getStats объекта Publisher в OTPublisher? - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь использовать уже существующий сеанс Tokbox и поток публикации, чтобы получать статистику в определенное время (щелчок кнопки и т. Д.).

В основной документации на tokbox.com об этом рассказываетсячтобы сделать это, но это не доступно, используя реагировать на токбокс

Вот как выглядит код. Сначала создается сеанс

startTokBox = (sessionData) => {
  const { webrtc_api, webrtc_session_id, webrtc_token } = sessionData.webrtc_details || {};
    this.tokbox = createSession({
      apiKey: String(webrtc_api),
      sessionId: webrtc_session_id,
      token: webrtc_token,
      onStreamsUpdated: (streams) => {
        this.setState({ streams });
      },
    });
}

Затем используется его в jsx

<OTPublisher
  session={this.tokbox.session}
  properties={{
    publishAudio: this.state.audio,
    publishVideo: false,
    ...this.publisherProperties,
  }}
  ref={this.otPublisher}
  eventHandlers={{
    streamCreated: this.onMyStreamCreated,
  }}
  onError={this.onError}
/>

В документации предлагается вызвать метод getPublisher, чтобы получить экземпляр Publisher для использования методов Publisher (с помощью которого, я полагаю,getStats будет доступен), но я не уверен, как это сделать. Любая помощь будет высоко ценится.

PS: я действительно не хочу использовать opentok-network-test и создавать новый экземпляр только для тестирования

1 Ответ

0 голосов
/ 29 октября 2019

Хорошо, я смог решить это. Я оставляю вопрос здесь, если кто-то еще сталкивается с той же проблемой.

Что вы делаете, в дополнение к приведенному выше коду, вы не забудьте инициализировать ссылку в конструкторе (как я сделал)

constructor(props) {
  super(props);
  this.otPublisher = React.createRef();
}

И затем вы получаете доступ к этой ссылке после монтирования компонента или везде, где вы создаете сеанс внутри компонента. Например, первый блок кода в вопросе теперь будет выглядеть так:

startTokBox = (sessionData) => {
  const { webrtc_api, webrtc_session_id, webrtc_token } = sessionData.webrtc_details || {};
    this.tokbox = createSession({
      apiKey: String(webrtc_api),
      sessionId: webrtc_session_id,
      token: webrtc_token,
      onStreamsUpdated: (streams) => {
        this.setState({ streams });
      },
    });

    this.otPublisher.current.getPublisher();
}

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

this.otPublisher.current.getPublisher().getStats((err, stats) => console.log('stats', err, stats));

Дополнительная информация и помощь по этому билету: https://github.com/opentok/opentok-react/issues/49

...