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');
}
相关推荐
苏州汇成元电子科技2 小时前
从I-PEX 82441-100B-02-D看14Pin极细同轴线束怎么选?
音视频·硬件工程·信号处理·材料工程
ZC跨境爬虫2 小时前
跟着 MDN 学 HTML day_33:(Attr 接口与属性节点的深入理解)
前端·javascript·ui·html·音视频·html5
科研前沿3 小时前
实景像素级精准复刻,夯实动态真孪生底座——原生自研技术壁垒,领航视频孪生产业发展
人工智能·音视频
血玥珏4 小时前
血玥珏-多WAV/MP3混音合成小工具2.0.0.5
c++·音视频
做萤石二次开发的哈哈5 小时前
智慧语音播报新方案:萤石云广播核心能力与应用详解
人工智能·音视频·萤石·云广播
ZC跨境爬虫5 小时前
跟着 MDN 学 HTML day_32:(AbstractRange 抽象接口与 DOM 范围操作)
前端·javascript·ui·html·音视频
开开心心就好6 小时前
支持音视频图片文档的格式转换器
人工智能·学习·游戏·决策树·音视频·动态规划·语音识别
科研前沿6 小时前
像素级实景映射,构建实景孪生底层新范式
科技·矩阵·音视频
XD7429716366 小时前
科技早报晚报|2026年5月8日:支付编排、浏览器视频编辑与低成本动作捕捉,今晚更值得做成产品的 3 个开源机会
科技·开源·音视频·开源项目·科技新闻·开发者工具
AI搅拌机7 小时前
LoRA训练自动化打标系统重磅发布!支持Qwen3.5破限和NSFW,功能覆盖图片视频音乐全自动打标
人工智能·自动化·音视频