CefSharp with LICode Issue


#1

Hi All,

I’m trying to use a 3rd party LICode SDK and CefSharp to embed a web page into a Windows Application (C#). The web page requires the Web RTC with both Video and Audio functions to enable the communication inbetween teacher and students in the same classroom.

Currently the web page itself is running probably in Chrome browser. However when it is loaded in CefSharp Browser in the Windows Application, I could only see teacher or my own video stream, and when I click subscribeStream to see other students video stream, their video stream cannot be shown up.

In the Debug Panel of CefSharp, the following error message shows up:

ERROR: message: DOMException: Failed to set remote answer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters… in baseStack at processAnswer erizo.js 1…

After reading Erizo.js, I believe the error occurred in this code section while it was trying to make a connection.

t.peerConnection = new RTCPeerConnection(t.pcConfig, t.con);

I assume t.con is the connection string to LICode server? Does it mean that I have to assign some value to t.con, before calling RTCPeerConnection?

#region Code Block
function (e, t, n) {
“use strict”;
const r = {
addSim: e => {
let t = “a=ssrc-group:SIM”;
return e.forEach(e => {
t += ${e}
}), ${t}\r\n
},
addGroup: (e, t) => a=ssrc-group:FID ${e} ${t}\r\n,
addSpatialLayer: (e, t, n, r, i, o) => a=ssrc:${i} cname:${e}\r\n + a=ssrc:${i} msid:${t}\r\n + a=ssrc:${i} mslabel:${n}\r\n + a=ssrc:${i} label:${r}\r\n + a=ssrc:${o} cname:${e}\r\n + a=ssrc:${o} msid:${t}\r\n + a=ssrc:${o} mslabel:${n}\r\n + a=ssrc:${o} label:${r}\r\n,
setMaxBW: (e, t) => {
let n, r, i = e;
return t.video && t.maxVideoBW && (null == (r = (i = i.replace(/b=AS:.\r\n/g, “”)).match(/m=video.\r\n/)) && (r = i.match(/m=video.\n/)), r && r.length > 0 && (n = ${r[0]}b=AS:${t.maxVideoBW}\r\n, i = i.replace(r[0], n))), t.audio && t.maxAudioBW && (null == (r = i.match(/m=audio.\r\n/)) && (r = i.match(/m=audio.\n/)), r && r.length > 0 && (n = ${r[0]}b=AS:${t.maxAudioBW}\r\n, i = i.replace(r[0], n))), i
},
enableOpusNacks: e => {
let t = e;
const n = t.match(/a=rtpmap:(.
)opus.*\r\n/);
if (null !== n) {
const e = ${n[0]}a=rtcp-fb:${n[1]}nack\r\n;
t = t.replace(n[0], e)
}
return t
}
};
t.a = r
}, function (e, t, n) {
“use strict”;
var r = n(1),
i = n(0);
t.a = (e => {
const t = {},
n = e;
let o, a;
i.a.info(“Starting Base stack”, n), t.pcConfig = {
iceServers: []
}, t.con = {}, void 0 !== n.iceServers && (t.pcConfig.iceServers = n.iceServers), void 0 === n.audio && (n.audio = !0), void 0 === n.video && (n.video = !0), n.remoteCandidates = [], n.localCandidates = [], n.remoteDescriptionSet = !1, t.mediaConstraints = {
offerToReceiveVideo: void 0 !== n.video && !1 !== n.video,
offerToReceiveAudio: void 0 !== n.audio && !1 !== n.audio
}, t.peerConnection = new RTCPeerConnection(t.pcConfig, t.con);

    //Error SDP
    console.log("pcConfig:" + t.pcConfig);
    console.log("con:" + t.con);

    const s = (e, t, n) => {
            i.a.error("message:", n, "in baseStack at", e), void 0 !== t && t("error")
        },
        c = e => {
            i.a.info("Success in BaseStack", e)
        },
        d = e => {
            (o = e).sdp = r.a.setMaxBW(o.sdp, n), n.callback({
                type: o.type,
                sdp: o.sdp
            }), i.a.info("Setting local description p2p", o), t.peerConnection.setLocalDescription(o).then(c).catch(s)
        };

#endregion

Did you ever encounter any question similar? Could you share some ideas in this case?

Thanks in advance!


#2

In fact, I just tried out another RTC product based on WebRTC.

It works while embedding the web page into CefSharp browser in Windows App. I can see the other person in the same channel or classroom, and vice versa.

But that product requires a payment plan ongoing…so guess not an option for now.

Any update or input for the original question would be appreciated!

Cheers