我正在 iOS 上运行 WebRTC 的演示应用程序。
但是没有像旧版 WebRTC 那样静音/取消静音的示例。
我已经搜索并找到了这个
如何在不更改框架的情况下禁用 webrtc 移动应用程序(ios)中的音频
但是最新的来源没有localStream。它添加了音频轨道和视频轨道。如果我将音轨“isEnable”设置为 FALSE。然后两个用户都听不到任何声音。
示例 用户 A 和用户 B 在通话中。我想要的是如果用户 A 静音,那么只有用户 B 听不到声音。
感谢所有帮助
以下是来自 google webrtc 教程的示例 webrtc 对等连接代码。这个链接。我无法正确理解 addIceCandidate() 如何使用 onIceCandidate() 将其 Ice 候选者添加到其远程对等点。event.candidate 在这里是什么意思。一个明确的解释将不胜感激
function onIceCandidate(pc, event) { //pc1.onicecandidate
if (event.candidate) {
getOtherPc(pc).addIceCandidate(
new RTCIceCandidate(event.candidate)
).then(
function() {
onAddIceCandidateSuccess(pc);
},
function(err) {
onAddIceCandidateError(pc, err);
}
);
Run Code Online (Sandbox Code Playgroud) 我是一个使用 angular6 的 webrtc 的新手。当我研究 WebRTC API 并构建一个简单的页面以在本地测试中显示/停止网络摄像头流时。我在开发中收到一条错误消息。有我的开发环境:
Angular 6.1.0
Angular-cli 6.1.2
打字稿 2.9.2
我构建了“停止”按钮来执行函数 stopBtn()。但是打字稿编译器会在构建应用程序时抛出错误消息:
错误 TS2339:属性“getTracks”不存在于类型“MediaStream | 斑点| 媒体资源”。“Blob”类型上不存在属性“getTracks”。
stopBtn() 函数代码:
private video: HTMLVideoElement;
.......
ngOnInit() {
this.video = <HTMLVideoElement>this.el.nativeElement.querySelector('#video');
}
........
getDevice() {.....}
getStream() {.....}
gotStream() {.....}
.......
stopBtn() {
if (this.video.srcObject) {
this.video.srcObject.getTracks().forEach( stream => stream.stop());
this.video.srcObject = null;
}
}
Run Code Online (Sandbox Code Playgroud)
html简单代码:
<video id="video" autoplay></video>
<button id="stopbtn" type="button" (click)="stopBtn()">Stop</button>
Run Code Online (Sandbox Code Playgroud)
此页面可以正确显示流。
我已经通过 stackoverflow 或 google 搜索了许多关键字来查找此错误消息。但是没有得到任何好的答案。所以希望有人能帮我解决。谢谢你。
将 videoroom 插件附加到 Janus 后,在“成功”回调中,我向它发送同步消息
janus.attach(
{
plugin: "janus.plugin.videoroom",
opaqueId: opaqueId,
success: function(pluginHandle) {
roomMaster = pluginHandle;
var isExist = {
"request" : "exists",
"room" : myroom
};
roomMaster.send({"message": isExist})
},
Run Code Online (Sandbox Code Playgroud)
并在控制台中从 获得响应janus.js,但在文档中告诉该插件将向我response发送消息。我不明白 - 我在哪里可以抓住它?
onmessage: function(msg, jsep){
// is fired only after sending async requests like "join", "start" - not "exists"
conslole.log(msg);
}
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
谢谢
你好,我是 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 = …Run Code Online (Sandbox Code Playgroud) 我整理了一个快速片段来测试在同一浏览器选项卡上下文中建立 WebRTC 对等连接。
const peerConnection1 = new RTCPeerConnection({ iceServers: [ { urls: 'stun:stun.l.google.com:19302' } ] });
peerConnection1.addEventListener('signalingstatechange', _ => log('1 signaling state ' + peerConnection1.signalingState));
peerConnection1.addEventListener('icegatheringstatechange', _ => log('1 ICE gathering state ' + peerConnection1.iceGatheringState));
peerConnection1.addEventListener('connectionstatechange', _ => log('1 connection state ' + peerConnection1.connectionState));
const peerConnection2 = new RTCPeerConnection({ iceServers: [ { urls: 'stun:stun.l.google.com:19302' } ] });
peerConnection2.addEventListener('signalingstatechange', _ => log('2 signaling state ' + peerConnection1.signalingState));
peerConnection2.addEventListener('icegatheringstatechange', _ => log('2 ICE gathering state ' + peerConnection1.iceGatheringState));
peerConnection2.addEventListener('connectionstatechange', _ => log('2 …Run Code Online (Sandbox Code Playgroud) 我需要从 Web 应用程序获取客户端本地 IP 地址。
为此,我使用标准的 RTCPeerConnection 实现来获取。但是返回的ice候选并没有携带IP V4地址,而是一个看起来像guid的地址:asdf-xxxx-saass-xxxx.local
但令人惊讶的是,这个chrome 扩展程序能够在同一台机器和浏览器上获取相同的内容。
注意:我在 Web 应用程序中使用的代码与扩展的代码相同
这是相同的html代码:
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript">
function logit(msg) {
var dt = new Date(); var time = dt.getHours() + ":" + dt.getMinutes() + ":"
+ dt.getSeconds();
console.log(time + " " + msg);
};
function getChromeVersion() {
try {
var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
return raw ? parseInt(raw[2], 10) : false;
} catch (e) {
return null;
}
}
function getChromeManifest() {
return chrome.runtime …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用简单对等库来建立浏览器到浏览器的 WebRTC 连接(数据通道)。我的理解是(也许我有一些误解),为了让两个浏览器通过 WebRTC 连接,它们必须交换 SDP 数据并执行 NAT 遍历。为了做到这一点,可以实现一个 STUN 服务器。
在 simple-peer 库中,他们声明 simple-peer 没有实现信令协议,但它确实提供了一种提供 STUN/ICE 服务器的方法。考虑来自其网格示例的以下三个 HTML 文件:
peer1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Peer1</title>
</head>
<body>
<script src="../../js/simplepeer.min.js"></script>
<script>
// These are peer1's connections to peer2 and peer3
var peer2 = new SimplePeer({ initiator: true, config: {
iceServers: [
{urls: 'stun:stun.a-mm.tv:3478'}
]
} })
var peer3 = new SimplePeer({ initiator: true, config: {
iceServers: [
{urls: 'stun:stun.a-mm.tv:3478'}
]
} })
peer2.on('signal', data => {
console.log(data) …Run Code Online (Sandbox Code Playgroud) 我正在使用运行 iOs 13 的第 5 代 iPad,当我访问此链接时:https : //webrtc.github.io/samples/src/content/devices/input-output/
navigator.mediaDevices在 iOs 13 上使用Chrome 78似乎未定义,但在 Windows 10 上使用Chrome 78定义...
有没有人有同样的问题?有什么替代方法可以让它在 iOs 上与 Chrome 一起使用?
我想在我们公司的服务器上搭建一个turn server(coturn)。而且我不确定外部访问应该允许哪些端口。8443 是必须的,使用 WebRTC。3478 是凭证使用的必要条件。但是TURN服务器使用的端口数不胜数,是否需要在防火墙中允许它们?或者应该允许哪些端口使用CoTURN没有问题?
webrtc ×10
javascript ×5
ios ×2
safari ×2
angular ×1
angular6 ×1
coturn ×1
mediadevices ×1
mute ×1
node.js ×1
sdp ×1
simple-peer ×1
turn ×1
typescript ×1
websocket ×1