Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ReactJs将网络摄像头传输到移动浏览器?_Javascript_Html_Css_Reactjs_Google Chrome - Fatal编程技术网

Javascript 如何使用ReactJs将网络摄像头传输到移动浏览器?

Javascript 如何使用ReactJs将网络摄像头传输到移动浏览器?,javascript,html,css,reactjs,google-chrome,Javascript,Html,Css,Reactjs,Google Chrome,我创建了一个简单的react应用程序,可以在浏览器上播放网络摄像头视频流。以下是github项目的链接: 代码非常简单明了: class AppStreamCam extends React.Component { constructor(props) { super(props); this.streamCamVideo= this.streamCamVideo.bind(this) } streamCamVideo() { var constraints

我创建了一个简单的react应用程序,可以在浏览器上播放网络摄像头视频流。以下是github项目的链接:
代码非常简单明了:

class AppStreamCam extends React.Component {
  constructor(props) {
    super(props);
    this.streamCamVideo= this.streamCamVideo.bind(this)
  }
  streamCamVideo() {
    var constraints = { audio: true, video: { width: 1280, height: 720 } };
    navigator.mediaDevices
      .getUserMedia(constraints)
      .then(function(mediaStream) {
        var video = document.querySelector("video");

        video.srcObject = mediaStream;
        video.onloadedmetadata = function(e) {
          video.play();
        };
      })
      .catch(function(err) {
        console.log(err.name + ": " + err.message);
      }); // always check for errors at the end.
  }
  render() {
    return (
      <div>
        <div id="container">
          <video autoPlay={true} id="videoElement" controls></video>
        </div>
        <br/>
        <button onClick={this.streamCamVideo}>Start streaming</button>
      </div>
    );
  }
}
类AppStreamCam扩展了React.Component{ 建造师(道具){ 超级(道具); this.streamCamVideo=this.streamCamVideo.bind(this) } streamCamVideo(){ var约束={音频:true,视频:{宽度:1280,高度:720}; navigator.mediaDevices .getUserMedia(限制条件) .then(功能(媒体流){ var video=document.querySelector(“视频”); video.srcObject=mediaStream; video.onloadedmetadata=函数(e){ video.play(); }; }) .catch(函数(err){ console.log(err.name+“:”+err.message); });//始终在结尾检查错误。 } render(){ 返回(
开始流媒体 ); } } 这就是结果:

一旦我点击按钮,网络摄像头就会打开并开始进入浏览器。
这是我的问题:
当我在手机上打开chrome并输入localServer地址,然后单击按钮时,应用程序崩溃,因为显然应用程序代码是要从pc浏览器运行的,以便它可以打开pc网络摄像头

因此,当我在手机上单击按钮时,我可以理解地得到以下错误:

TypeError:无法读取未定义的属性“getUserMedia”

我的目标是在我的移动浏览器中单击按钮,并开始在我的移动浏览器上像在pc上一样播放pc网络摄像头


然而,我不知道从哪里开始。有什么帮助吗

我已经解决了这个问题。
1.打开package.json并将其粘贴到脚本中:

“开始”:“设置HTTPS=true&&react脚本开始”

这应该通过https为应用程序提供服务
2.如果出现此错误:

React应用程序错误:构造“WebSocket”失败:不安全的 WebSocket连接不能从加载到的页面启动 HTTPS

打开

node_modules/react dev utils/webpackHotDevClient.js

并将此代码粘贴到连接的定义中:

这显然是react脚本中尚未解决的一个bug。如果使用https协议,我们应该使用基于SSL/TLS(WSS)协议的WebSockets,而不是WebSockets(WS)。您可以了解更多信息:


注意:这不会将您的pc网络摄像头流式传输到您的手机中,而是流式传输到手机的摄像头中。

我注意到其他人也遇到了类似的问题:。然而,它还没有被回答。。。显然,连接需要通过移动浏览器的SSL完成。在做了一些控制台记录后,我发现导航器对象在移动浏览器中不可访问?为什么会这样<代码>“getUserMedia()是一项功能强大的功能,只能在安全上下文中使用;在不安全上下文中,未定义navigator.mediaDevices,从而阻止对getUserMedia()的访问。简而言之,安全上下文是使用HTTPS或文件:///URL方案加载的页面,或从localhost加载的页面。”
protocol: window.location.protocol === 'https:' ? 'wss' : 'ws',