Freeswitch+Sip.js 早期媒体(回铃音)

Freeswitch+Sip.js 早期媒体(Early Media)


在笔者早期的文章里,没有对早期媒体进行处理,选择了本地的媒体进行播放,在当时看来还可以接受,但是目前来看,体验很差,所以笔者花费了很长时间搜集关于sip.js回铃音的相关文档,甚至一度打算改用jssip去实现此功能(笔者自己写了个测试demo,效果还可以),后来考虑到可能需要修改的业务代码比较多,就放弃了.官方的github上对于此话题的讨论热度很高,具体地址 Support for early media (with 100rel or not) for InviteClientContext,在这里可以找到解决方案(果然牛人还是很多).在讲述解决方案之前,先推荐两个比较好的地址,基本上可以解决绝大多数问题

  1. https://github.com/onsip/SIP.js/issues
  2. https://groups.google.com/forum/#!forum/sip_js

环境

1. freeswitch: 1.6/1.8
2. Sip.js: 0.13.8

笔者选择的sip.js的版本为sip-0.13.8.js,(目前最新版本为0.15.x,许多API进行了更改,官方说明此版本最新的API是支持早期媒体的,新的API还在主库维护,感兴趣的可以自己测试一下,0.15.x官方API地址)


freeswitch核心配置

  • 修改 internal.xml,如下
 <param name="enable-100rel" value="true"/>

此处是重中之重,一定要确保此参数是开启的


Sip.js核心代码及说明

根据sip.js官方给出的说明,我们需要设置以下两个参数

  1. UA的Configuration添加参数
rel100: SIP.C.supported.REQUIRED 
# 此参数会在sip头中添加一个参数 Require: 100rel,
  1. 在进行invite邀请时添加参数
 inviteWithoutSdp:true 
 # 使用此参数会发送一个没有sdp的请求,但是freeswitch不能处理这个请求,所以笔者按照SIPJS官方的建议设置此参数时,
 # 呼叫不可达,折腾了半天,实在无法解决.自认 没有能力解决(本人是freeswith入门小白).后来呼叫时未设置此参数,卡线是
 #可以听到回铃音的,中继线路需要读者自己去测试

所以我们仅需要设置第一个参数即可.

rel100: SIP.C.supported.REQUIRED 

部分html代码

 var remoteVideo = document.getElementById('remoteVideo');
 var localVideo = document.getElementById('localVideo'); 

 session.on('trackAdded', function() {
            console.error(this);
            var pc = this.sessionDescriptionHandler.peerConnection;
            var remoteStream;

            if (pc.getReceivers) {
                remoteStream = new window.MediaStream();
                pc.getReceivers().forEach(function (receiver) {
                    var track = receiver.track;
                    if (track) {
                        remoteStream.addTrack(track);
                    }
                });
            } else {
                remoteStream = pc.getRemoteStreams()[0];
            }
            remoteVideo.srcObject = remoteStream;


            var localStream_1;
            if (pc.getSenders) {
                localStream_1 = new window.MediaStream();
                pc.getSenders().forEach(function (sender) {
                    var track = sender.track;
                    if (track && track.kind === "video") {
                        localStream_1.addTrack(track);
                    }
                });
            }
            else {
                localStream_1 = pc.getLocalStreams()[0];
            }
            localVideo.srcObject = localStream_1;
        });


如果文章帮助到你的话,请点个赞,谢谢!如果有任何疑惑,欢迎评论留言或者私聊我.


相关文档地址: https://blog.csdn.net/weixin_42275389/article/details/93610894

参考资料: https://www.sipjs.com/

参考资料: https://github.com/onsip/SIP.js/issues

参考资料: https://groups.google.com/forum/#!forum/sip_js

源码连接:https://download.csdn.net/download/weixin_42275389/12233090

### 回答1: freeswitch.tar.gz 是 FreeSWITCH 软件的压缩包,可以通过下载获取到该软件的安装文件。FreeSWITCH 是一个开源的软交换平台,支持语音、视频、文本等各种通信协议,可以让用户构建自己的电话系统、呼叫中心和实时通讯平台等。 要下载 freeswitch.tar.gz,用户可以访问 FreeSWITCH 官网(https://freeswitch.com/),在页面中的下载区域找到该软件的下载链接,并选择合适的版本进行下载。另外,还可以通过搜索引擎等方式找到其他可靠的下载源,并下载相应的软件包。 下载完成后,用户需要解压压缩包,然后按照 FreeSWITCH 的安装指南进行安装配置。通常需要设置一些参数,如软件的安装路径、IP 地址、端口号等,以及安装必要的依赖包和插件。在安装完成后,用户就可以使用 FreeSWITCH 提供的一系列功能和接口,构建自己的通信系统了。 ### 回答2: freeswitch.tar.gz是FreeSWITCH软件的安装包,可以在官网或者其他社区网站上进行下载。由于其体积较大,因此在下载过程中需要耐心等待,并且需要保证网络畅通,否则可能会出现下载失败或下载速度缓慢的情况。一些网站可能会限制下载速度或要求进行登录验证才能下载该文件。在下载完成之后,需要解压安装包并按照要求进行安装,一般包括设置软件环境、编译安装、配置参数等步骤。在安装完成后,还需要进行相应的测试和调试工作,以确保软件能够正常运行并满足用户需求。总体而言,freeswitch.tar.gz下载和安装需要一定的技术实力和耐心,但相信只要在正确的指导下进行,是可以成功完成的。 ### 回答3: freeswitch.tar.gz是一个FreeSWITCH软件的源代码压缩包。用户可以在官方网站上下载或通过github进行下载。在下载之前,用户需要确认自己系统的版本和平台以及FreeSWITCH版本的要求。下载完成后,用户可以解压缩该文件并按照官方文档进行安装和配置。在安装和配置完成后,用户就可以使用FreeSWITCH软件实现语音通信、视频通信、即时通讯等业务。 FreeSWITCH是开源、免费的,用户可以对其进行二次开发和定制以满足自己的需求。同时,FreeSWITCH还提供了包括SIP协议、音频编解码等一系列底层技术的支持,使其应用范围更加广泛。总体来说,freeswitch.tar.gz的下载可以帮助用户快速获取和使用FreeSWITCH软件,是许多开发人员和通信从业者的首选。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值