javascript – 如何使用react js组件在网页上流式传输网络摄像头?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何使用react js组件在网页上流式传输网络摄像头?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2905字,纯文字阅读大概需要5分钟。
内容图文
我是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组件的工作方式,有几点需要了解.首先根据React docs:
The render() function should be pure, meaning that it does not modify
component state, it returns the same result each time it’s invoked,
and it does not directly interact with the browser.
您应该将视频元素初始化为另一个生命周期方法,例如componentDidMount,以确保它只初始化一次.
其次,您很少需要直接与DOM交互.在这种情况下,我们可以使用组件的内部状态来管理视频流的src属性,确保它只在流初始化后才更新.
这是一个可能有效的更新组件:
var MyComponent = React.createClass({
getInitialState: function(){
return { videoSrc: null }
},
componentDidMount: function(){
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
if (navigator.getUserMedia) {
navigator.getUserMedia({video: true}, this.handleVideo, this.videoError);
}
},
handleVideo: function(stream) {
// Update the state, triggering the component to re-render with the correct stream
this.setState({ videoSrc: window.URL.createObjectURL(stream) });
},
videoError: function() {
},
render: function() {
return <div>
<video src={this.state.videoSrc} autoPlay="true" />
</div>;
}
});
内容总结
以上是互联网集市为您收集整理的javascript – 如何使用react js组件在网页上流式传输网络摄像头?全部内容,希望文章能够帮你解决javascript – 如何使用react js组件在网页上流式传输网络摄像头?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。