Я пытаюсь использовать соединение Kurento между webRTCendpoint и RTPendpoint. Клиент webRTCendpoint — это браузер Chrome. Клиент RTPendpoint — это SIP-сервер (прокси/B2BUA). Вот базовый код или псевдокод, который у меня есть (я использую Kurento-client.js на своем сервере приложений):
//On receipt of offer from the WebRTC Browser-Peer
mySignalling.on('sdpOffer', function(sdpOffer) { //Action starts!
//Create Mediapipeline so that endpoints can be created
kurentoClient.create('MediaPipeline', function(error, pipeline) {
pipeline.create('webRtcEndpoint', function(error, myWebrtcEndpoint) {
//Get ICE Candidates from webRTC endpoint to send to browser
mySignalling.on('candidate', function(candidate) {
myWebrtcEndpoint.addIceCandidate(candidate);
});
myWebrtcEndpoint.on('OnIceCandidate', function(event) {
var candidate = kurento.register.complexTypes.IceCandidate(event.candidate);
mySignalling.send(candidate); //Send ICE candidate to webRTC browser peer
});
pipeline.create('rtpEndpoint', function(error,myRtpEndpoint) {
myWebrtcEndpoint.connect(myrtpEndpoint,function(error){ });
myWebrtcEndpoint.processOffer(sdpOffer, function(error, sdpAnswer) {
mySignalling.send(sdpAnswer); //Send answersdp to browser
});
myRtpEndpoint.generateOffer(function(error){
myRtpEndpoint.getLocalSessionDescriptor(function(error, sdpRTP) {
mySignalling2.send(sdpRTP); //Send SDP to Asterisk as part of SIP INVITE
});
});
});
});
});
});
У меня есть несколько вопросов:
- Верна ли общая структура?
- Какая польза от webRTCEndpoint.gatherCandidates? В документации сказано, что его нужно вызывать после processOffer. Почему? Как это связано с методом addIceCandidate?
- RTPEndpoint подключается к webrtcEndpoint, но как мне управлять профилем RTP, который будет создан с помощью RTPEndpoint generateOffer? Я имею в виду, как мне, например, получить RTP/AVPF, а не RTP/AVP из RTPEndpoint? Если нет, и AVPF должен быть сопоставлен с AVP, будет ли Kurento обрабатывать F в AVPF при переходе от AVPF к AVP.
Для простоты я не добавлял обработку ошибок, обработку событий OnIceGatheringDone, обеспечение нескольких пользователей/сеансов и т. д.
Кроме того, я создаю свои собственные SIP-запросы на сервере приложений и обрабатываю SIP-ответы. При необходимости я буду изменять SDP, сгенерированные RTPEndpoint.generateOffer, если потребуется. Придет к тому моменту, когда я преодолею этот первоначальный барьер!