簡體   English   中英

如何在webrtc sdp中刪除視頻編解碼器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM