gpt4 book ai didi

webrtc - 有没有办法在 WebRTC PeerConnection 中选择编解码器?

转载 作者:行者123 更新时间:2023-12-01 09:58:02 24 4
gpt4 key购买 nike

嘿,我想知道在 WebRTC 中创建报价/答案时是否有任何方法可以选择编解码器。目前可供选择的视频编解码器并不多,但有音频编解码器,如 Opus、PCMU、PCMA 等。

最佳答案

一般来说,是的。这是在建立连接期间如何选择 Opus 编解码器的示例。
您应该从 createAnswer 或 createOffer 的回调函数中调用“preferOpus”。

var preferOpus = function(sdp) {
var sdpLines = sdp.split('\r\n');

for (var i = 0; i < sdpLines.length; i++) {
if (sdpLines[i].search('m=audio') !== -1) {
var mLineIndex = i;
break;
}
}

if (mLineIndex === null) return sdp;

for (i = 0; i < sdpLines.length; i++) {
if (sdpLines[i].search('opus/48000') !== -1) {
var opusPayload = extractSdp(sdpLines[i], /:(\d+) opus\/48000/i);
if (opusPayload)
sdpLines[mLineIndex] = setDefaultCodec(sdpLines[mLineIndex], opusPayload);
break;
}
}

sdpLines = removeCN(sdpLines, mLineIndex);

sdp = sdpLines.join('\r\n');
return sdp;
};

var extractSdp = function(sdpLine, pattern) {
var result = sdpLine.match(pattern);
return (result && result.length == 2)? result[1]: null;
};

var setDefaultCodec = function(mLine, payload) {
var elements = mLine.split(' ');
var newLine = new Array();
var index = 0;
for (var i = 0; i < elements.length; i++) {
if (index === 3) newLine[index++] = payload;
if (elements[i] !== payload) newLine[index++] = elements[i];
}
return newLine.join(' ');
};

var removeCN = function(sdpLines, mLineIndex) {
var mLineElements = sdpLines[mLineIndex].split(' ');
for (var i = sdpLines.length-1; i >= 0; i--) {
var payload = extractSdp(sdpLines[i], /a=rtpmap:(\d+) CN\/\d+/i);
if (payload) {
var cnPos = mLineElements.indexOf(payload);
if (cnPos !== -1) mLineElements.splice(cnPos, 1);
sdpLines.splice(i, 1);
}
}
sdpLines[mLineIndex] = mLineElements.join(' ');
return sdpLines;
};

关于webrtc - 有没有办法在 WebRTC PeerConnection 中选择编解码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21402990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com