首页 > 解决方案 > Opentok React:如何调用OTPublisher的Publisher对象的getStats方法?

问题描述

我正在尝试使用我已经存在的 tokbox 会话和发布流来获取特定时间的统计信息(单击按钮等)。

tokbox.com 上的主要文档对此进行了讨论,提供了一种方法,但使用react tokbox无法访问

这是代码的样子。首先是创建会话

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并创建一个新实例只是为了测试

标签: reactjsopentoktokbox

解决方案


好的,我能够解决这个问题。如果其他人面临同样的问题,我将问题留在这里。

你所做的是,除了上面的代码,你不要忘记在构造函数中初始化引用(就像我做的那样)

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


推荐阅读