[英]How to remove video codecs in webrtc sdp?
我想知道如何從SDP產品中刪除H264編解碼器。 或者也許我可以以某種方式禁用此編解碼器? 我找到了一個很好的解決方案,但收到錯誤消息。 錯誤出現在網上
var modsdp = sdp.replace(codecre, "");
未捕獲的SyntaxError:無效或意外的令牌
function removeCodec(orgsdp, codec) {
var internalFunc = function(sdp) {
var codecre = new RegExp('(a=rtpmap:(\\d*) ' + codec + '\/90000\\r\\n)');
var rtpmaps = sdp.match(codecre);
if (rtpmaps == null || rtpmaps.length <= 2) {
return sdp;
}
var rtpmap = rtpmaps[2];
var modsdp = sdp.replace(codecre, "");
var rtcpre = new RegExp('(a=rtcp-fb:' + rtpmap + '.*\r\n)', 'g');
modsdp = modsdp.replace(rtcpre, "");
var fmtpre = new RegExp('(a=fmtp:' + rtpmap + '.*\r\n)', 'g');
modsdp = modsdp.replace(fmtpre, "");
var aptpre = new RegExp('(a=fmtp:(\\d*) apt=' + rtpmap + '\\r\\n)');
var aptmaps = modsdp.match(aptpre);
var fmtpmap = "";
if (aptmaps != null && aptmaps.length >= 3) {
fmtpmap = aptmaps[2];
modsdp = modsdp.replace(aptpre, "");
var rtppre = new RegExp('(a=rtpmap:' + fmtpmap + '.*\r\n)', 'g');
modsdp = modsdp.replace(rtppre, "");
}
var videore = /(m=video.*\r\n)/;
var videolines = modsdp.match(videore);
if (videolines != null) {
//If many m=video are found in SDP, this program doesn't work.
var videoline = videolines[0].substring(0, videolines[0].length - 2);
var videoelem = videoline.split(" ");
var modvideoline = videoelem[0];
for (var i = 1; i < videoelem.length; i++) {
if (videoelem[i] == rtpmap || videoelem[i] == fmtpmap) {
continue;
}
modvideoline += " " + videoelem[i];
}
modvideoline += "\r\n";
modsdp = modsdp.replace(videore, modvideoline);
}
return internalFunc(modsdp);
};
return internalFunc(orgsdp);}
感謝您的任何幫助。
我在這里https://groups.google.com/forum/#!topic/discuss-webrtc/4lNUw9CkhIc收到的答案可以正常工作。 只需重寫幾行代碼(已注釋掉)。 他們看起來一樣。 但是注釋掉的行會導致語法錯誤。 我想他們用不同於英語的語言寫的。 用英文鍵盤重寫它們可以解決問題
function removeCodec(orgsdp, codec) {
var internalFunc = function(sdp) {
var codecre = new RegExp('(a=rtpmap:(\\d*) ' + codec + '\/90000\\r\\n)');
var rtpmaps = sdp.match(codecre);
if (rtpmaps == null || rtpmaps.length <= 2) {
return sdp;
}
var rtpmap = rtpmaps[2];
// var modsdp = sdp.replace(codecre, "");
var modsdp = sdp.replace(codecre, "");
var rtcpre = new RegExp('(a=rtcp-fb:' + rtpmap + '.*\r\n)', 'g');
// modsdp = modsdp.replace(rtcpre, "");
modsdp = modsdp.replace(rtcpre, "");
var fmtpre = new RegExp('(a=fmtp:' + rtpmap + '.*\r\n)', 'g');
// modsdp = modsdp.replace(fmtpre, "");
modsdp = modsdp.replace(fmtpre, "");
var aptpre = new RegExp('(a=fmtp:(\\d*) apt=' + rtpmap + '\\r\\n)');
var aptmaps = modsdp.match(aptpre);
var fmtpmap = "";
if (aptmaps != null && aptmaps.length >= 3) {
fmtpmap = aptmaps[2];
// modsdp = modsdp.replace(aptpre, "");
modsdp = modsdp.replace(aptpre, "");
var rtppre = new RegExp('(a=rtpmap:' + fmtpmap + '.*\r\n)', 'g');
modsdp = modsdp.replace(rtppre, "");
}
var videore = /(m=video.*\r\n)/;
var videolines = modsdp.match(videore);
if (videolines != null) {
//If many m=video are found in SDP, this program doesn't work.
var videoline = videolines[0].substring(0, videolines[0].length - 2);
var videoelem = videoline.split(" ");
var modvideoline = videoelem[0];
for (var i = 1; i < videoelem.length; i++) {
if (videoelem[i] == rtpmap || videoelem[i] == fmtpmap) {
continue;
}
modvideoline += " " + videoelem[i];
}
modvideoline += "\r\n";
modsdp = modsdp.replace(videore, modvideoline);
}
return internalFunc(modsdp);
};
return internalFunc(orgsdp);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.