- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 react.js
和 WebRTC
上进行简单的视频聊天。但是在 pc.addStream(localStream)
行中发生错误:
TypeError: Argument 1 of RTCPeerConnection.addStream is not an object.
而且我不明白为什么我在行中看不到日志:
pc.onicecandidate = (e)=>{
console.log('onicecandidate');
这就是全部代码:
class App extends Component {
constructor(props) {
super(props);
}
componentDidUpdate(){
loadScript("https://webrtc.github.io/adapter/adapter-latest.js");
let localVideo, remoteVideo, peerConnection, localStream;
$('#start').on('click', ()=>{ start(true) });
let id = uuid();
localVideo = document.getElementById('localVideo');
remoteVideo = document.getElementById('remoteVideo');
if(navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia( { video:true, audio:true}).then( ( stream )=> {
localStream = stream;
localVideo.src = window.URL.createObjectURL(stream);
}).catch(errorHandler);
}else{ alert('Your browser does not support getUserMedia API'); }
function start(isCaller) {
peerConnection = new RTCPeerConnection( { 'iceServers': [{'urls': 'stun:stun.services.mozilla.com'}, {'urls': 'stun:stun.l.google.com:19302'},]});
peerConnection.onicecandidate = ( e ) => {
if(e.candidate != null) {
Meteor.call('addMsgRtc', JSON.stringify({'ice': e.candidate, '_id':id}), id);
}
};
peerConnection.onaddstream = ( e )=>{
remoteVideo.src = window.URL.createObjectURL(e.stream);
};
peerConnection.addStream(localStream);
if(isCaller) {
peerConnection.createOffer().then(
createdDescription).catch(errorHandler);
}
}
if (!this.props.loadingRtc) {
for(let i of this.props.messagesRtc){
if(!peerConnection) start(false);
let signal = JSON.parse(i.text);
if(signal._id == id) return;
if(signal.sdp) {
peerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp)).then(()=> {
if(signal.sdp.type == 'offer') { peerConnection.createAnswer().then(createdDescription).catch(errorHandler);
}
}).catch(errorHandler);
}else if(signal.ice) {
peerConnection.addIceCandidate(new RTCIceCandidate(signal.ice)).catch(errorHandler);
}
}
}
function createdDescription(description) {
peerConnection.setLocalDescription(description).then(()=> {
Meteor.call('addMsgRtc', JSON.stringify({'sdp':peerConnection.localDescription, '_id':id}), id);
}).catch(errorHandler);
}
function errorHandler(error) { console.log(error); }
}
}
render() {
return (
<div id="container">
<video id="localVideo" autoPlay muted style={{width:"40%"}}></video>
<video id="remoteVideo" autoPlay style={{width:"40%"}}></video>
<br/>
</div>
);
}
}
export default createContainer( ()=> {
const subscriptionRtc = Meteor.subscribe('rtc');
const loadingRtc = !subscriptionRtc.ready();
return {
loadingRtc:loadingRtc,
messagesRtc: msgRtc.find().fetch(),
};
}, App);
最佳答案
getUserMedia
是一个返回 promise 的异步操作。在调用pc.addStream
时,设置localStream
的.then()
还没有执行。您可能希望将 start()
移动到 .then()
中。
ontrack 事件没有 e.stream
顺便说一句。您可能想改用 onaddstream
。另外请设置 srcObject = e.stream
而不是使用 URL.createObjectURL
。
关于javascript - react.js 和 WebRTC RTCPeerConnection.addStream 不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402234/
我正在使用 webrtc-adapter v2.0.8,当我更新我的代码时 this.peerConnection.addStream(this.myStream); 到 this.myStream.
由于 RTCPeerConnection.addStream() 已被弃用,现在如何将视频等媒体流添加到 peerConnection? 这是我目前使用的视频流捕获功能。我想看看我是否正在从我的相机中
鉴于以下 Dart 代码片段: Stream stream1 = new Stream.periodic(new Duration(seconds: 1), (n) => n)
这个问题已经有答案了: WebRTC video is not displaying (1 个回答) 已关闭 4 年前。 我正在尝试附加使用 getusermedia() 捕获的流上startPeer
本文整理了Java中net.lingala.zip4j.core.ZipFile.addStream()方法的一些代码示例,展示了ZipFile.addStream()的具体用法。这些代码示例主要来源
我想在 react.js 和 WebRTC 上进行简单的视频聊天。但是在 pc.addStream(localStream) 行中发生错误: TypeError: Argument 1 of RTCP
我正在使用 RxDart 来观察变化并相应地更新 UI。当应用程序启动时,我正在进行网络调用并成功获取数据,观察更改并相应地更新 UI。但是当我在关闭屏幕时处理 Subjects 时。它给出以下错误:
我使用 PeerJS 成功在两个对等点之间建立了连接,但每当我尝试将 MediaStream 对象传递给 .call 函数时,我都会收到此错误: Failed to execute 'addStrea
我是一名优秀的程序员,十分优秀!