【问题标题】:How to start and stop both the webcam stream and microphone in React JSX using WebRTC?如何使用 WebRTC 在 React JSX 中启动和停止网络摄像头流和麦克风?
【发布时间】:2021-06-27 02:28:19
【问题描述】:

我已经在我的 ReactJSX 文件中使用了 getUserMedia。我是 ReactJSX 的新手,我已经查看了一些与此相关的 stackoverflow 帖子,但不幸的是,许多现有指令包含一行代码/函数,已被 webRTC 弃用。

但是,我一直无法弄清楚如何在 React JSX 中停止网络摄像头流和麦克风。由于这门语言对我来说很新,有人可以帮助我吗?

这是我在 React JSX 中 return() 标记之前的工作代码

  navigator.mediaDevices.getUserMedia({
      audio: true,
      video: true
    })
    .then(stream => {
      document.getElementById("startstream").srcObject = stream;
    })

这是我必须在 React JSX 中的 return() 标签之后显示和启用摄像头和麦克风的工作代码:

<video id="startstream" autoPlay />

这两个代码 sn-ps 都可以工作,它允许用户启动流/启动他们的麦克风,但是我如何启动停止网络摄像头/使用 ReactJSX 中的按钮的麦克风?我在网上看到过类似的使用另一种编码语言的东西,但是如果有人代码帮助我让它与 ReactJSX 一起工作,那将不胜感激。

【问题讨论】:

  • 为什么不用onclick事件,然后清除srcObject?
  • @FahmiJabbar 我是 React JSX 的新手,那我该怎么做呢?下面的解决方案无法停止 JSX 中的摄像头,我认为清除 srcObject 是可能的解决方案

标签: javascript reactjs webrtc jsx


【解决方案1】:
import React from "react";
import "./styles.css";

class WebRTCSample extends React.Component {
  constructor(props) {
    super(props);
    this.state = { localStream: null };
  }

  componentDidMount() {}

  startWebCam = () => {
    const that = this;
    navigator.mediaDevices
      .getUserMedia({
        audio: true,
        video: true
      })
      .then((stream) => {
        that.setState({ localStream: stream });
      });
  };

  stopWebCam = () => {
    this.state.localStream.getTracks().forEach((track) => {
      track.stop();
    });
  };

  render() {
    return (
      <div className="App">
        {/* <h1>Hello GetUserMedia</h1> */}
        {this.state.localStream && (
          <video
            autoPlay
            ref={(video) => {
              if (video) {
                video.srcObject = this.state.localStream;
              }
            }}
            // src={this.state.localStream}
          />
        )}
        <div className="startStopWebCam">
          <button
            className="WebCamButton"
            onClick={this.startWebCam.bind(this)}
          >
            Start
          </button>
          <button className="WebCamButton" onClick={this.stopWebCam.bind(this)}>
            Stop
          </button>
        </div>
      </div>
    );
  }
}

export default WebRTCSample;

DEMO

【讨论】:

  • 我如何在前端使用 React JSX 向用户显示一个停止流的按钮?
  • @anonymousowl 你问如何渲染button?只需使用&lt;button onClick={stopWebCam}&gt;Stop Webcam&lt;/button/&gt; 标签,它就会被渲染。
  • 哦,好的,我试过了,但由于某种原因,该按钮无法使 stopWebCam 在 JSX 上工作。另外,我使用的是 JSX,所以 class WebRTCSample extends React.Component { } 在 JSX 语法中不起作用
  • 所以你对 ReactJSX 中的 &lt;button onClick={stopWebCam}&gt;Stop Webcam&lt;/button/&gt; 部分实际上是正确的。但是在 JSX 中,我不能做你在 app.js 中编写的代码的前 8 行。我可以做const className = () =&gt; { };,但不是所有与前 8 行相关的代码。所以我相信这就是它不起作用的原因
  • @BabakYaghoobi 基本上我怎么能没有'class WebRTCSample extends React.Component { constructor(props) {super(props); this.localStream = null ;}' 在 JSX 中?
猜你喜欢
  • 2012-10-04
  • 2020-10-25
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多