Реагировать Opentok как обновить разрешение издателя? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть реализация opentok-реакции, для которой я бы хотел обновить разрешение издателя.К сожалению, кажется, что OTPublisher будет обновляться только при изменении определенных значений, и разрешение не является одним из них.В документации я вижу, что getPublisher () следует использовать для обновления издателя после его инициализации, но я не вижу примеров того, как это делается.Вот компонент, который мне нужно обновить:

import React, { Component } from 'react';
import { OTSession, OTPublisher } from 'opentok-react';

const styles = {
  publisherWindow: {
    height: '155px',
    width: '230px',
    style: { buttonDisplayMode: 'off' },
  },
};

type Props = {
  sessionId: string,
  sessionToken: string,
  apiKey: string,
  muted: boolean,
  style?: Object,
  onError: Function,
  eventHandlers: Object,
  lowerResolution: boolean,
};

type State = {
  publish: boolean,
};

class TokboxPublisher extends Component<Props, State> {
  state = {
    publish: true,
  };

  static SURVEYOR_STREAM_NAME = 'Surveyor Stream';

  componentWillMount() {
    this.retryTimeout = setTimeout(this.retry, 6000);
  };

  componentWillUnmount() {
    if (this.retryTimeout) {
      clearTimeout(this.retryTimeout);
    }
  };

  onPublish = () => {
    console.log('Publishing...');
    if (this.retryTimeout) {
      clearTimeout(this.retryTimeout);
    }
  };

  retry = () => {
    this.retryTimeout = undefined;
    console.log('Retrying publish...');
    this.setState({ publish: false }, () => this.setState({ publish: true }));
  };

  render() {
    if (!this.state.publish) {
      return null;
    }
    console.log('lowerResolution: ', this.props.lowerResolution);
    return (
      <OTSession
        apiKey={this.props.apiKey}
        sessionId={this.props.sessionId}
        token={this.props.sessionToken}
        eventHandlers={this.props.eventHandlers}
      >
        <OTPublisher
          ref={this.otPublisher}
          properties={{
            publishAudio: !this.props.muted,
            resolution: this.props.lowerResolution ? '320x240' : '640x480',
            frameRate: this.props.lowerResolution ? 1 : 30,
            name: TokboxPublisher.SURVEYOR_STREAM_NAME,
            ...styles.publisherWindow,
            ...this.props.style,
          }}
          onPublish={this.onPublish}
          onError={this.props.onError}
        />
      </OTSession>
    );
  }
}

export default TokboxPublisher;

Как бы я использовал getPublisher () в этом коде, чтобы получить разрешение для обновления, когда свойство lowerResolution изменится на 'true'?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Базовый API opentok.js не поддерживает изменение разрешения или частоты кадров после того, как вы создали Publisher.Вам нужно будет создать новый объект издателя, когда разрешение изменится на что-то вроде:

render() {
 if (!this.state.publish) {
  return null;
 }
 console.log('lowerResolution: ', this.props.lowerResolution);
 return (
  <OTSession
    apiKey={this.props.apiKey}
    sessionId={this.props.sessionId}
    token={this.props.sessionToken}
    eventHandlers={this.props.eventHandlers}
  >
    this.props.lowerResolution ? <OTPublisher
      ref={this.otLowResPublisher}
      properties={{
        publishAudio: !this.props.muted,
        resolution: '320x240',
        frameRate: 1,
        name: TokboxPublisher.SURVEYOR_STREAM_NAME,
        ...styles.publisherWindow,
        ...this.props.style,
      }}
      onPublish={this.onPublish}
      onError={this.props.onError}
    /> : <OTPublisher
      ref={this.otHDPublisher}
      properties={{
        publishAudio: !this.props.muted,
        resolution: '640x480',
        frameRate: 30,
        name: TokboxPublisher.SURVEYOR_STREAM_NAME,
        ...styles.publisherWindow,
        ...this.props.style,
      }}
      onPublish={this.onPublish}
      onError={this.props.onError}
    />
  </OTSession>
 );
}

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

0 голосов
/ 23 ноября 2018

TokBox Developer Evangelist здесь.

Когда вы вызываете метод getPublisher() компонента OTPublisher, возвращается объект Publisher .Затем вы можете вызывать методы videoWidth() и videoHeight() для объекта Publisher в любое время, чтобы узнать разрешение издателя.Для получения дополнительной информации о методах издателя, пожалуйста, посетите: https://tokbox.com/developer/sdks/js/reference/Publisher.html#methods

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...