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');
}
相关推荐
weixin_451431564 分钟前
HLS加密流解码异常导致视频花屏?通用技术解析及合规指引
网络·音视频
reasonsummer18 小时前
【教学类-160-11】20260419 AI视频培训-练习011“豆包AI视频《佛源植语》+豆包图片风格:无(关键词:藏传唐卡)”
数据库·音视频·豆包
彷徨而立20 小时前
音频编码格式 G.729 和 G.729A 的区别
音视频
EasyDSS20 小时前
私有化视频会议平台/视频直播点播/高清点播/音视频点播EasyDSS“直播+点播+会议”全场景融合解锁视频协作新体验
音视频
EasyDSS20 小时前
企业级融媒体生产管理平台/私有化音视频系统EasyDSS一体化架构打造全流程应急指挥视频会议体系
架构·音视频·媒体
视频技术分享21 小时前
音视频SDK深度解析:技术演进、核心要点与发展前景
音视频
大蚂蚁2号21 小时前
本地视频转文字|video2text
python·音视频·视频转文本
肖爱Kun1 天前
wvp-GB28181服务器网页报错调试
音视频
byte轻骑兵1 天前
【LE Audio】BASS精讲[4]: 控制点解析,广播接收指令交互全流程
人工智能·音视频·语音识别·le audio·低功耗音频
ai产品老杨1 天前
告别协议碎片化:基于 GB28181 与 RTSP 的统一 AI 视频中台架构实现(附 Docker 源码交付方案)
人工智能·架构·音视频