javascript – WebRTC远程和本地视频都显示本地流
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – WebRTC远程和本地视频都显示本地流,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2991字,纯文字阅读大概需要5分钟。
内容图文
![javascript – WebRTC远程和本地视频都显示本地流](/upload/InfoBanner/zyjiaocheng/707/2238194cc70345b182459516ff918061.jpg)
您好,我是WebRTC的新手,我试过这段代码
const yourVideo = document.querySelector("#face_cam_vid");
const theirVideo = document.querySelector("#thevid");
(async () => {
if (!("mediaDevices" in navigator) || !("RTCPeerConnection" in window)) {
alert("Sorry, your browser does not support WebRTC.");
return;
}
const stream = await navigator.mediaDevices.getUserMedia({video: true,
audio: true});
yourVideo.srcObject = stream;
const configuration = {
iceServers: [{urls: "stun:stun.1.google.com:19302"}]
};
const yours = new RTCPeerConnection(configuration);
const theirs = new RTCPeerConnection(configuration);
for (const track of stream.getTracks()) {
yours.addTrack(track, stream);
}
theirs.ontrack = e => theirVideo.srcObject = e.streams[0];
yours.onicecandidate = e => theirs.addIceCandidate(e.candidate);
theirs.onicecandidate = e => yours.addIceCandidate(e.candidate);
const offer = await yours.createOffer();
await yours.setLocalDescription(offer);
await theirs.setRemoteDescription(offer);
const answer = await theirs.createAnswer();
await theirs.setLocalDescription(answer);
await yours.setRemoteDescription(answer);
})();
它工作但部分https://imgur.com/a/nG7Xif6.总之,我正在创建一对一的随机视频聊天,就像在omegle中一样,但这段代码显示“远程”(陌生人)和“本地”(“我的”)视频与我的本地流,但我想要的只是,用户等待第二个用户进行视频聊天,当第三个用户输入时应等待第四个等等.我希望有人会帮助我
解决方法:
你把一个本地循环演示 – 你所拥有的 – 与聊天室混淆了.
A local-loop demo是一种短路客户端概念验证,将同一页面上的两个对等连接相互链接.完全没用,除了证明API工作和浏览器可以自己说话.
它包含localPeerConnection和remotePeerConnection或pc1和pc2,而不是人们通常编写WebRTC代码的方式.它遗漏了信号.
如果没有服务器,信号很难演示,但我向人们展示了这个tab demo.右键单击并在两个相邻的窗口中打开它,然后单击“呼叫”!一个按钮打电话给另一个.它使用localSocket,这是我使用localStorage进行信令的非生产黑客.
同样没用,tab-demo看起来更像真实的代码:
const pc = new RTCPeerConnection();
call.onclick = async () => {
video.srcObject = await navigator.mediaDevices.getUserMedia({video:true, audio:true});
for (const track of video.srcObject.getTracks()) {
pc.addTrack(track, video.srcObject);
}
};
pc.ontrack = e => video.srcObject = e.streams[0];
pc.oniceconnectionstatechange = e => console.log(pc.iceConnectionState);
pc.onicecandidate = ({candidate}) => sc.send({candidate});
pc.onnegotiationneeded = async e => {
await pc.setLocalDescription(await pc.createOffer());
sc.send({sdp: pc.localDescription});
}
const sc = new localSocket();
sc.onmessage = async ({data: {sdp, candidate}}) => {
if (sdp) {
await pc.setRemoteDescription(sdp);
if (sdp.type == "offer") {
await pc.setLocalDescription(await pc.createAnswer());
sc.send({sdp: pc.localDescription});
}
} else if (candidate) await pc.addIceCandidate(candidate);
}
有一个PC – 你的一半呼叫 – 并且有一个onmessage信令回调来正确处理时间关键的非对称提供/应答协商.双方都是相同的JS.
这仍然不是聊天室.为此,您需要服务器逻辑来确定人们如何相遇,以及用于信令的Web套接字服务器.尝试this tutorial on MDN,最终在chat demo.
内容总结
以上是互联网集市为您收集整理的javascript – WebRTC远程和本地视频都显示本地流全部内容,希望文章能够帮你解决javascript – WebRTC远程和本地视频都显示本地流所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。