jssip修改SDP优先VP8

在使用Freeswitch会议融屏的时候,画面有时候会偏色,感觉编解码少了通道,整体会偏紫;怀疑是mp4的编解码可能有问题,后续改成优先VP8,感觉在使用的时候会减少类似情况;

找到暴露的位置
javascript 复制代码
UA.on('newRTCSession', (res) => {
    let { session, originator } = res;
    session.on('sdp', (event) => {
        // sdp一定要判断type是'offer'的时候去修改;
        if (event.type === 'offer') {
            let sdp = event.sdp;
            // 修改SDP优先匹配VP8
            sdp =  SDPPrioritizeCodec(sdp, 'VP8');
            event.sdp = sdp;
        };
    });
})
封装修改SDP方法
javascript 复制代码
/* 调用 SDPPrioritizeCodec(sdp, 'VP8'); */
export function SDPPrioritizeCodec(sdp, preferredCodec) {
    const codecRegex = /a=rtpmap:(\d+) (\w+)/g;
    let codecPayloads = {};
    let sdpLines = sdp.split('\r\n');
    let mLineIndex = -1;

    // 遍历SDP的每一行,找到codec的payload types
    sdpLines.forEach((line, index) => {
        if (line.startsWith('m=video')) {
            mLineIndex = index;
        }
        let match = codecRegex.exec(line);
        while (match) {
            codecPayloads[match[2]] = match[1];
            match = codecRegex.exec(line);
        }
    });

    // 如果找到了m=video行
    if (mLineIndex !== -1) {
        let mLineParts = sdpLines[mLineIndex].split(' ');
        let payloadList = mLineParts.slice(3); // 去掉m=video和端口号部分,只保留payload types
        
        let preferredPayload = codecPayloads[preferredCodec];
        let updatedPayloadList = payloadList.filter(p => p !== preferredPayload); // 删除优先编解码器,准备重新排序
        
        if (preferredPayload) {
            // 将优先的编解码器Payload放在最前面
            updatedPayloadList.unshift(preferredPayload);
            // 重新构建m=video行
            mLineParts = mLineParts.slice(0, 3).concat(updatedPayloadList);
            sdpLines[mLineIndex] = mLineParts.join(' ');
        }
    }

    return sdpLines.join('\r\n');
}
相关推荐
智算菩萨1 小时前
OpenCV色彩空间转换实战:BGR转HSV/LAB的工业应用场景详解(含自动化脚本)
人工智能·python·opencv·计算机视觉·自动化·音视频
顾道长生'3 小时前
(ICLR-2026)LONGLIVE:实时交互式长视频生成
音视频·长视频生成
爱学习的程序媛3 小时前
【WebRTC】呼叫中心前端技术选型:SIP.js vs JsSIP vs Verto
前端·javascript·typescript·音视频·webrtc·实时音视频·web
愚公搬代码5 小时前
【愚公系列】《剪映+DeepSeek+即梦:短视频制作》027-字幕:用文字来美化画面(用剪映专业版添加字幕贴纸)
音视频
小仙女的小稀罕5 小时前
专业音频工具排行 | 迅捷音频转文字介绍
音视频
Terasic友晶科技5 小时前
2-DE10-Nano的HDMI音频传输案例——基于FPGA的I2S控制模块设计
fpga开发·音视频·i2s·de10-nano·hdmi音频传输
irpywp6 小时前
SentrySearch:一款支持用自然语言检索原生 MP4 视频的 Python 命令行工具
python·音视频·概率论
2301_764441337 小时前
Helios:14B实时长视频生成模型
人工智能·音视频
0xDevNull7 小时前
Java 视频在线播放功能案例
java·开发语言·音视频
EasyGBS7 小时前
国密GB35114协议+国标GB28181平台EasyGBS双重保障筑牢安防视频安全防线
安全·https·音视频