Javascript 需要澄清Kurento';将WebRTC端点连接到RTPEndpoint的API

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以便可以创建端点

我试图使用Kurento的webRTCendpoint到RTPendpoint的桥接。webRTCendpoint客户端是一个Chrome浏览器。RTPendpoint客户端是一个SIP服务器(代理/B2BUA)。以下是我的基本代码或伪代码(我正在我的应用服务器中使用Kurento-client.js):

//收到来自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
});
});
});
});
});
});
我有几个问题:

  • 整体结构正确吗
  • webRTCEndpoint.gather候选者的用途是什么?文档说明必须在processOffer之后调用它。为什么?它是如何连接到addIceCandidate方法的
  • RTPendpoint连接到WebRTC端点,但如何控制RTPendpoint generateOffer生成的RTP配置文件?我的意思是,例如,如何从RTPEndpoint获取RTP/AVPF而不是RTP/AVP?如果没有,AVPF必须映射到AVP,Kurento将在AVPF与AVP之间桥接时处理AVPF中的“F”
  • 为了简单起见,我没有添加错误处理、一个事件处理、为多个用户/会话提供服务等

    另一方面,我正在应用服务器中构建自己的SIP请求,并处理SIP响应。如果需要,我将更改RTPEndpoint.generateOffer生成的SDP(如果需要)。当我跨过这个最初的障碍时,我会达到这一点

    看起来不错。如果愿意,可以在创建
    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,”