- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试实现纯语音 WebRTC 应用程序。我在 Chrome Version 29.0.1547.0 dev
上运行它。我的应用使用 Socket.IO 作为信号机制。
peerConnection.addIceCandidate()
给我这个错误:Uncaught SyntaxError: An invalid or illegal string was specified.
另外,peerConnection.setRemoteDescription();
给我这个错误:Uncaught TypeMismatchError: The type of an object was incompatible with the expected type of parameter associated to the object.
这是我的代码:
服务器(在 CoffeeScript 中)
app = require("express")()
server = require("http").createServer(app).listen(3000)
io = require("socket.io").listen(server)
app.get "/", (req, res) -> res.sendfile("index.html")
app.get "/client.js", (req, res) -> res.sendfile("client.js")
io.sockets.on "connection", (socket) ->
socket.on "message", (data) ->
socket.broadcast.emit "message", data
客户端(在 JavaScript 中)
var socket = io.connect("http://localhost:3000");
var pc = new webkitRTCPeerConnection({
"iceServers": [{"url": "stun:stun.l.google.com:19302"}]
});
navigator.getUserMedia = navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia;
navigator.getUserMedia({audio: true}, function (stream) {
pc.addStream(stream);
}, function (error) { console.log(error); });
pc.onicecandidate = function (event) {
if (!event || !event.candidate) return;
socket.emit("message", {
type: "iceCandidate",
"candidate": event.candidate
});
};
pc.onaddstream = function(event) {
var audioElem = document.createElement("audio");
audioElem.src = webkitURL.createObjectURL(event.stream);
audioElem.autoplay = true;
document.appendChild(audioElem);
console.log("Got Remote Stream");
};
socket.on("message", function(data) {
if (data.type === "iceCandidate") {
console.log(data.candidate);
candidate = new RTCIceCandidate(data.candidate);
console.log(candidate);
pc.addIceCandidate(candidate);
} else if (data.type === "offer") {
pc.setRemoteDescription(data.description);
pc.createAnswer(function(description) {
pc.setLocalDescription(description);
socket.emit("message", {type: "answer", description: description});
});
} else if (data.type === "answer") {
pc.setRemoteDescription(data.description);
}
});
function offer() {
pc.createOffer( function (description) {
pc.setLocalDescription(description);
socket.emit("message", {type: "offer", "description": description});
});
};
HTML 仅包含一个调用 offer()
的按钮。
我可以确认 ICECandidates
和 SessionDescriptions
正在从一个客户端成功传输到另一个客户端。
我做错了什么?我应该如何修复这些错误和任何其他错误,以便我可以将音频从一个客户端传输到另一个客户端?
PS:如果您知道记录 WebRTC API 的良好来源(W3C 文档除外),请告诉我!
谢谢!
最佳答案
对于那个错误,重点是,只有在成功设置远程描述后,才必须添加 ICE 候选人。
请注意,在(由 Offerer)创建 Offer 之后,会立即生成 ice candidates。因此,如果应答者以某种方式收到这些候选人,在设置远程描述之前(理论上它会在候选人之前到达),您会收到错误。
提供者也是如此。它必须在添加任何候选冰之前设置远程描述。
我看到在您的 javascript 代码中您不保证在添加 ice candidates 之前设置了远程描述。
首先,您可以在 pc.addIceCandidate(candidate);
之前检查是否设置了 pc 的 remoteDescription。如果您看到它为 null(或未定义),您可以在本地存储收到的 ice candidates 以在设置 remoteDescription 后添加它们(或等待 offerer 在适当的时间发送它们。)
关于html - peerConnection.addIceCandidate 给出错误 : invalid string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346616/
在几乎所有关于 WebRTC 的教程中,来自 onicecandidate 回调的候选人在 createOffer() 之前通过信令服务器发送给对等方。然后,对等方通过 addicecandidate
我正在尝试调用: peerConn.addIceCandidate(其中 peerConn 是 RtcPeerConnection 的实例) 我得到: NotSupportedError:内部 Dar
我正在尝试学习 WebRTC,我已经实现了在同一页面中连接两个 RTCPeerConnection,现在我正尝试将它们分成两个单独的页面并连接它们。但是,在编写代码并交换报价和答案之后,我注意到
我正在尝试实现纯语音 WebRTC 应用程序。我在 Chrome Version 29.0.1547.0 dev 上运行它。我的应用使用 Socket.IO 作为信号机制。 peerConnectio
我正在尝试使用 webRTC 连接两个对等点。我能够正确显示本地和远程视频,但是只要远程视频出现,候选对象就会变为 null 并且在控制台上它会记录以下错误消息。 TypeError: Failed
我使用网络 Rtc 和网络套接字创建了一个简单的视频通话应用程序。但是当我运行代码时,出现了以下错误。 DOMException [InvalidStateError: "setRemoteDescr
我是一名优秀的程序员,十分优秀!