编辑:我写了一个详细的教程,解释如何构建一个简单的Videochat应用程序,包括一个信号服务器:
如果您觉得它有用且易于理解,请告诉我.谢谢!
我试图让Streams通过WebRTC和Websocket(nodejs-server)工作.据我所知,通过SDP的握手工作,并建立了Peerconnection.问题是 - 远程视频没有播放.src-Attribute获取了Blob并设置了自动播放,但它只是不会播放.也许我对ICE候选人做错了(它们用于媒体流,对吧?).有没有办法检查PeerConnection是否设置正确?
编辑:也许我应该解释代码是如何工作的
在网站加载时建立与websocket-server的连接,创建使用谷歌STUN服务器的PeerConnection,并收集视频和音频流并将其添加到PeerConnection
当一个用户点击"创建商品"时 - 按钮将包含其会话描述(SDP)的消息发送到服务器(客户端功能sendOffer()),该服务器将其广播给其他用户
另一个用户获取消息并保存他收到的SDP
如果用户单击"接受要约",则将SDP添加到RemoteDescription(func createAnswer()),然后将该回复消息(包含应答用户的SDP)发送给产品用户
在产品用户端执行func offerAccepted(),将其他用户的SDP添加到他的RemoteDesription中.
我不确定在什么时候确切地调用了icecandidate处理程序,但我认为它们应该可以正常工作,因为我在两侧都有两个日志.
这是我的代码(这仅用于测试,所以即使有一个叫做广播的功能,也意味着一次只有2个用户可以在同一个网站上):
index.html的标记:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
#acceptOffer {
display: none;
}
</style>
</head>
<body>
<h2>Chat</h2>
<div>
<textarea class="output" name="" id="" cols="30" rows="10"></textarea>
</div>
<button id="createOffer">create Offer</button>
<button id="acceptOffer">accept Offer</button>
<h2>My Stream</h2>
<video id="myStream" autoplay src=""></video>
<h2>Remote Stream</h2>
<video id="remoteStream" autoplay src=""></video>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="websocketClient.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是服务器代码:
"use strict";
var webSocketsServerPort = 61122;
var webSocketServer = require('websocket').server,
http = …Run Code Online (Sandbox Code Playgroud) 我使用chrome 21运行我的webrtc代码.
如果我在同一个chrome中打开两个选项卡,然后打开包含webrtc代码的页面.一个选项卡用于发送视频流; 一个选项卡用于接收视频流它工作正常.
但是,如果我用两个隐身模式或两个不同的Chrome浏览器打开页面,我可以正确获取sdp和候选信息.看来视频可以解码信息.
在远程视频中,我只能看到 
此外,它似乎崩溃.我试图点击"关闭铬"但没用.
有没有人有类似的问题?
我正在尝试实现仅限语音的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 the parameter associated to the object.
这是我的代码:
SERVER(在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
Run Code Online (Sandbox Code Playgroud)
CLIENT(用JavaScript)
var socket = io.connect("http://localhost:3000"); …Run Code Online (Sandbox Code Playgroud)