【发布时间】:2017-04-27 23:01:48
【问题描述】:
我是 reactJS 的新手,正在尝试构建一个组件。
我想构建一个基本实用程序,其中我有一个显示实时网络摄像头提要的视频组件,并且会有一个捕获按钮,用于捕获提要的快照并将其存储到磁盘。我希望它位于单个组件中(视频源 + 捕获按钮)
此代码在浏览器中流式传输提要,但我希望它在组件中,
<body>
<div id="container">
<video autoplay="true" id="videoElement">
</video>
</div>
<script>
var video = document.querySelector("#videoElement");
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
if (navigator.getUserMedia) {
navigator.getUserMedia({video: true}, handleVideo, videoError);
}
function handleVideo(stream) {
video.src = window.URL.createObjectURL(stream);
}
function videoError(e) {}
</script>
</body>
</html>
这很好用,但它不是一个组件。
我在 reaact js 中尝试了以下操作,但它不起作用:
<body>
<div id="container">
</div>
<script type="text/jsx">
var MyComponent = React.createClass({
handleVideo: function(stream) {
video.src = window.URL.createObjectURL(stream);
},
videoError: function() {
},
render: function() {
var video = document.querySelector("#videoElement");
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
if (navigator.getUserMedia) {
navigator.getUserMedia({video: true}, this.handleVideo, this.videoError);
}
return <div>
<video autoplay="true" id="videoElement">
</video>
</div>;
}
});
React.render( <MyComponent />, document.getElementById('container'));
</script>
</body>
错误在handleVideo()中
ReferenceError:视频未定义。
我对错误的理解是,
由于视频标签在后面部分(作为回报)出现,它试图在handleVideo函数中的定义之前使用。 我很困惑如何完成这项工作。
谢谢!
【问题讨论】:
-
我没有在我的答案中包含这个,因为它实际上不是答案的一部分,但从你的代码看来,你正在将你的 React 代码与你的 HTML 保持一致。 JSX 旨在用于 Javascript 文件,虽然您可以将其放入 HTML,但将组件代码保存在单独的文件中可能会更成功。您的 IDE 不会被同一个文件中的两种类似 HTML 的语法混淆,使用 Babel 等工具将 JSX 转换为浏览器友好的 JS 等会更容易。
-
谢谢,我计划将反应代码放在另一个文件中,但我认为我可以先运行 cod,然后使用单独的文件构建进一步的功能。我只是通过使用 Youtube 视频教程来学习,这就是我开始的方式,通过增强同一文件中的代码。 :)
-
重要提示:Google Chrome 不推荐使用 createObjectURL 函数。改用这个: function handleVideo(stream) { video.srcObject=stream; }
标签: javascript html reactjs video-streaming webcam