Javascript 需要澄清Kurento';将WebRTC端点连接到RTPEndpoint的API
我试图使用Kurento的webRTCendpoint到RTPendpoint的桥接。webRTCendpoint客户端是一个Chrome浏览器。RTPendpoint客户端是一个SIP服务器(代理/B2BUA)。以下是我的基本代码或伪代码(我正在我的应用服务器中使用Kurento-client.js):Javascript 需要澄清Kurento';将WebRTC端点连接到RTPEndpoint的API,javascript,webrtc,kurento,Javascript,Webrtc,Kurento,我试图使用Kurento的webRTCendpoint到RTPendpoint的桥接。webRTCendpoint客户端是一个Chrome浏览器。RTPendpoint客户端是一个SIP服务器(代理/B2BUA)。以下是我的基本代码或伪代码(我正在我的应用服务器中使用Kurento-client.js): //收到来自WebRTC浏览器对等方的报价时 mySignalling.on('sdpOffer',函数(sdpOffer){//操作开始! //创建Mediapipeline以便可以创建端点
//收到来自WebRTC浏览器对等方的报价时
mySignalling.on('sdpOffer',函数(sdpOffer){//操作开始!
//创建Mediapipeline以便可以创建端点
创建('MediaPipeline',函数(错误,管道){
create('webRtcEndpoint',函数(错误,myWebrtcEndpoint){
//从webRTC端点获取ICE候选项以发送到浏览器
mySignalling.on('candidate',函数(candidate){
myWebrtcEndpoint.addIceCandidate(候选);
});
myWebrtcEndpoint.on('OnIceCandidate',函数(事件){
var-candidate=kurento.register.complexTypes.IceCandidate(event.candidate);
mySignalling.send(候选者);//将ICE候选者发送到webRTC浏览器对等方
});
create('rtpEndpoint',函数(错误,myRtpEndpoint){
连接(myrtpEndpoint,函数(错误){});
processOffer(sdpOffer,函数(error,sdpAnswer){
mySignalling.send(sdpAnswer);//将应答sdp发送到浏览器
});
myRtpEndpoint.generateOffer(函数(错误){
myRtpEndpoint.getLocalSessionDescriptor(函数(错误,sdpRTP){
mySignalling2.send(sdpRTP);//将SDP作为SIP邀请的一部分发送到Asterisk
});
});
});
});
});
});
我有几个问题:
RtpEndpoint
之前完成WebRtcEndpoint
协商。此外,您还错过了对gatherCandidates
的调用,这将在下一个问题中介绍
2) gatherCandidates
用于向de WebRTC端点发送信号,以开始采集ICE候选对象。也就是说,这是对ICE协议的优化:当发现候选对象时,会将其发出,并发送给另一个对等方进行探测。这加快了连接时间,因为在获取所有数据之前可以找到有效的候选数据(可能需要20秒或更长时间)。WebRtcEndpoint
需要将候选对象发送到远程对等方,而从远程对等方接收的候选对象则使用addIceCandidate
方法进行处理。如果您在处理报价或生成答案之前致电gatherCandidates
,这些候选人将被添加到SDP报价或答案中,您将使用香草冰淇淋
3) 如果您打算将RtpEndpoint仅用于发射,我建议您提供一个带有所需选项的损坏SDP,并使用提供该选项的端点进程。例如,如果要发送到Wowza,可以修复Wowza媒体服务器期望RTP流的IP和端口。1)看起来不错。如果愿意,可以在创建RtpEndpoint
之前完成WebRtcEndpoint
协商。此外,您还错过了对gatherCandidates
的调用,这将在下一个问题中介绍
2) gatherCandidates
用于向de WebRTC端点发送信号,以开始采集ICE候选对象。也就是说,这是对ICE协议的优化:当发现候选对象时,会将其发出,并发送给另一个对等方进行探测。这加快了连接时间,因为在获取所有数据之前可以找到有效的候选数据(可能需要20秒或更长时间)。WebRtcEndpoint
需要将候选对象发送到远程对等方,而从远程对等方接收的候选对象则使用addIceCandidate
方法进行处理。如果您在处理报价或生成答案之前致电gatherCandidates
,这些候选人将被添加到SDP报价或答案中,您将使用香草冰淇淋
3) 如果您打算将RtpEndpoint仅用于发射,我建议您提供一个带有所需选项的损坏SDP,并使用提供该选项的端点进程。例如,如果要发送到Wowza,可以修复Wowza媒体服务器期望RTP流的IP和端口。谢谢。第2点:你说“如果你打电话给Gather候选者,在处理报价或生成答案之前,这些候选者将被添加到SDP报价或答案中,你将使用Vanilla ICE。”据我所知,在浏览器中,本地ICE候选者在打电话给setLocalDescription后被解雇。这是有意义的,因为浏览器获取信息以生成准确的候选对象,而不是“普通”的ICE。因此,在库兰托,候选人不应该被解雇,直到远程报价被处理并生成答案。应该不需要一种新的方法。我遗漏了什么?第3点:我将使用RTPEndpoint从两端进行媒体流。“损坏的SDP,”