FreeSWITCH 1.10.10 简单图形化界面25-JsSIP虚拟摄像头

标题

FreeSWITCH 1.10.10 简单图形化界面25-JsSIP虚拟摄像头


目录

标题

前言

一、测试环境

二、添加虚拟摄像头

1.说明

2.示例

三、效果



前言

在使用jssip进行视频呼叫的时候,jssip会调用本地摄像头,如果调用失败,则无法进行视频呼叫,只能进行音频呼叫。

如下图,在使用jssip时,如果没有摄像头或者摄像头调用失败会提示:

控制台提示:

(以上截图为阻止了摄像头使用权限,模拟调用摄像头失败的情况)

但是在实际应用中,并不是所有电脑都有摄像头设备的,因此在没有摄像头设备,但是需要进行视频呼叫时,可以使用通过canvas画布创建一个虚拟摄像头,模拟硬件视频流。


一、测试环境

参考安装步骤:https://blog.csdn.net/jia198810/article/details/137820796,安装一个FreeSWITCH作为测试环境。

参考使用手册:https://docs.qq.com/pdf/DVEZjSGhXVHhaUEFW?,设置一下WSS环境,并添加账号。

二、添加虚拟摄像头

1.说明

在jssip的ua的call方法中,可以通过options的mediaStream属性,设置jssip在视频呼叫时的媒体流。如下图:

(mediaConstraints 媒体约束为{'audio': true, 'video': true}才会调用摄像头设备,这个就不多说了,我们测试的就是视频呼叫)

2.示例

编写方法获取本地视频流,如果获取失败,则创建canvas画布,模拟视频流。

获取本地视频流,代码示例:

        //获取本地媒体

        //stream.getTracks() [0]音频 [1]视频.
        //stream.getAudioTracks() stream.getVideoTracks()
        
         // 使用canvas创建虚拟摄像头,文字内容为"未找到摄像头设备"
        this.createVirtualStream = () => {
            const text = "未找到摄像头设备";
            const canvas = document.createElement('canvas');
            canvas.width = 800;
            canvas.height = 600;
            const ctx = canvas.getContext('2d');
            ctx.fillStyle = 'black';
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            ctx.fillStyle = 'white';
            ctx.font = '64px Arial';
            ctx.textAlign = 'center';
            ctx.fillText(text, canvas.width / 2, canvas.height / 2);

            // 将画布内容转换为MediaStream
            const stream = canvas.captureStream();
            return stream;

        };
        // 获取本地媒体流
        this.getLocalMediaStream = async (mediaType) => {
            try {
                this.showLog("尝试获取本地媒体流");
                let constraints = mediaType === "video" ? { audio: true, video: true } : { audio: true, video: false };
                let stream = await navigator.mediaDevices.getUserMedia(constraints);
                return stream;
            } catch (error) {
                this.showLog('获取本地媒体流失败, 设置虚拟摄像头(音频流和视频流):', error.name, error.message);
                // 分别获取获取音频流和视频流,然后合并为一个MediaStream对象
                // 获取音频流
                let audioConstraints = { audio: true };
                let audioStream;
                try {
                    audioStream = await navigator.mediaDevices.getUserMedia(audioConstraints);
                } catch (audioError) {
                    this.showLog('获取音频流也失败,仅使用虚拟摄像头:', audioError.name, audioError.message);
                     // 如果电脑连声卡驱动都没有,音频都获取失败,则jssip会呼叫失败,虽然音频流返回了虚拟摄像头,但是不会呼叫成功
                    return this.createVirtualStream();
                }

                // 获取虚拟摄像头视频流
                let videoStream = this.createVirtualStream();

                // 合并音频和视频流,返回需要的MediaStream对象
                let combinedStream = new MediaStream([...audioStream.getTracks(), ...videoStream.getTracks()]);
                return combinedStream;
            }
        };

       

jssip呼叫时,设置options的mediaStream属性,代码示例:

        //--拨打电话
        this.makeCall = async (calleeNumber, mediaType = "audio") => {
            if (this.ua == null) {
                this.showLog("发起呼叫:没有ua")
                return false
            }
            if (this.ua.isRegistered() == false) {
                this.showLog("发起呼叫:未注册")
                return false
            }

            if (calleeNumber == "") {
                this.showLog("发起呼叫:被叫号码不能为空")
                return false;
            }
            if (calleeNumber === this.username) {
                this.showLog("发起呼叫:不能呼叫自己")
                return false;
            }

            let options = {
                eventHandlers: {
                    progress: (e) => { },
                    failed: (e) => { },
                    ended: (e) => { },
                    confirmed: (e) => { },
                },
                mediaConstraints: mediaType === "video" ? { audio: true, video: true } : { audio: true, video: false },
               //设置自定义的媒体流
                mediaStream: await this.getLocalMediaStream(mediaType),
                pcConfig: this.getPcConfig()
            };
            console.log("呼出OPTION:", options)
            this.currentCall = this.ua.call(`sip:${calleeNumber}@${this.server}`, options);
        }


三、测试

我们把浏览器的视频权限设置为阻止,模拟获取本地视频获取失败的情况,如下图:

如果打开本地摄像头的话,会显示模拟摄像头的内容,如下图:

此时,获取本地视频流失败的情况下,使用jssip进行视频呼叫,测试是可以进行视频呼叫的,如下图:

以上代码为封装的jssip库的代码,用的都是this,原理就是那样的。如果要参考代码,请稍微改改呗,祝君好运。

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Windows下FreeSWITCH的安装及使用 奕奕星空 2019-09-28 15:27:58 808 收藏 4 展开 1、FreeSWITCH 简介 FreeSWITCH 是一个电话的软交换解决方案,包括一个软电话和软交换机用以提供语音和聊天的产品驱动。FreeSWITCH 可以用作交换机引擎、PBX、多媒体网关以及多媒体服务器等。 FreeSWITCH 支持多种通讯技术标准,包括 SIP, H.323, IAX2 以及 GoogleTalk ,可以方便的与其他开源的PBX系统进行对接,例如 sipX, OpenPBX, Bayonne, YATE 或者 Asterisk.  FreeSWITCH 支持许多高级的 SIP 特性,例如 presence/BLF/SLA 、TCP TLS 和 sRTP,它还可以用来作为类似于 SBC (Session Border Controller) 的透明代理。  FreeSWITCH的是一个跨平台的开源电话交换平台,具有很强的伸缩性。旨在为音频、视频、文字或任何其他形式的媒体,提供路由和互连通信协议。它创建于2006年,填补了许多商业解决方案的的空白。FreeSWITCH的也提供了一个稳定的电话平台,许多广泛使用的免费电话就是在使用它开发的。   2、下载及安装 windows版本下载地址:https://files.freeswitch.org/windows/installer/ 百度云盘:https://pan.baidu.com/s/1lBLH5XbLNuCynoaverpaWA  提取码:6mrj    以下测试版本:FreeSWITCH-1.10.1-Release-x64.msi 下载后,双击按提示一步一步操作,安装完成后在安装目录下选择FreeswitchConsole.exe执行文件,以管理员的身份运行,这样会打开命令行的工具并运行,运行时间为30s左右; 如上图所示启动成功!   3、FreeSWITCH配置 FreeSwitch默认设置了20个用户,如果需要更多的用户,那么只需要简单的三步就可以完成。 在conf/directory/default/中增加一个用户配置文件 修改拨号计划(Dialplan)使其它用户可以呼叫它 重新加载配置使其生效 要添加用户Jason,分机号是1020,只需要到conf/directory/default目录下,将1000.xml拷贝到1020.xml,然后打开1020.xml,将所有1000都改为1020,并把effective_caller_id_name的值改为Jason,然后保存退出。 如: 接下来,打开 conf/dialplan/default.xml,找到   行,将其改为: 保存退出,回到控制台,然后执行reloadxml命令或按快捷键F6,使新的配置生效,那么新用户1020便添加成功。 如果你在某个运营商拥有SIP账号,就可以配置拨打外部电话。   4、软电话连接使用 FreeSwitch默认配置了1000~1019共20个用户,你可以随便选择一个用户进行配置(相当于已经在此服务器下注册了20个用户,用户名分别是1000、1001、……),下面就将来测试这个服务器,支持SIP协议的客户端软件有:X-Lite、Zoiper、Boghe、IMSDroid等,这里我们可以选用支持SIP协议的X-Lite、Boghe、IMSDroid来测试。 以下测试使用X-Lite,下载地址:https://www.counterpath.com/x-lite/ 百度云盘:https://pan.baidu.com/s/1DkZ9z__b6vGg8LEKMacQCw  提取码:bf8w  下载安装后,配置AccountSettings: 注册成功后: 可用freeswitch客户端fs_cli.exe 查看注册信息: 命令:sofia status profile internal reg   5、发起外呼 在fs_cli.exe中执行命令:originate user/1000 &echo 上述命令在呼叫 1000 这个用户后,便执行 ec
### 回答1: Freeswitch是一种开放源代码的语音和通信软件,提供语音、视频和多媒体通信能力。为了方便用户操作和管理,开发者为Freeswitch开发了简单图形化界面Freeswitch图形化界面基于Web技术实现,并采用Bootstrap框架和React.js技术。它具有简洁、易用的界面和友好的用户体验。用户只需在浏览器中输入相关的IP地址和端口号即可进入图形化界面。在界面中,用户可以登录、配置路由、管理通话、监控系统状态等操作。 图形化界面默认包含一些基本配置,例如:用户、呼入路由、呼出路由,用户可以根据自己的需求进行修改或者新增配置。用户也可以在界面中管理通话,例如:发起呼叫、挂断电话、进行转移等等。此外,Freeswitch图形化界面还提供系统日志、性能监控等功能,方便用户进行系统维护和管理。 总体来看,Freeswitch 1.10.7图形化界面为用户提供了方便、高效的使用体验,并提高了系统管理的可视化程度,这对于语音和通信行业的从业者及其管理者来说具有很大的意义。 ### 回答2: FreeSWITCH是一款强大的开源电话系统,其中1.10.7版本是最新的稳定版本。它支持Voice over IP(VoIP)和其他通信技术,如电话、传真和视频。同时,这款软件也支持多种协议,例如SIP、H.323和WebRTC,可以在 Linux、Windows 和 macOS 等不同平台上运行。 不过,对于一些初学者来说,命令行界面较为复杂,很难驾驭,因此出现了一些可以在图形界面下进行FreeSWITCH的配置和管理的工具。其中一些工具功能繁多,但使用起来相对复杂,很难快速掌握。而在这些工具中,Sangoma的FreePBX可能是比较著名的一个,但它需要安装在 FreeSWITCH 系统之外。 这里介绍一个能够在 FreeSWITCH 系统内完成图形化界面配置的工具,它是由FreeSWITCH的社区成员开发的。这个工具名为FreeSWITCH Desktop GUI (FSgui),目前已经实现了基础的系统配置以及呼叫中心方面的功能。 关于FSgui的使用,它提供了可视化的配置界面,在功能区中可以快捷地调整相关配置。例如,在呼叫中心方面,可以通过可视化配置,添加、编辑和删除IVR,管理呼叫、管理坐席分机等功能,缩短了用户配置的时间,从而提高效率。此外,其还支持SIP Trunks的管理,可以方便地配置多个SIP Trunks,以便于用户同时使用多种语音服务提供商。 总之,FreeSWITCH Desktop GUI 是一款简单易用的图形化工具,它为用户提供了快捷的配置方式,能够帮助使用者快速完成系统的配置与调整。同时,它是开源软件,可以在 GitHub 上进行下载。 ### 回答3: freeswitch是一款功能强大的开源电话交换机软件,但对于一些非技术人员来说,其操作和配置可能会比较复杂。为了能够更简单、更直观地使用freeswitch,一些第三方开发者开发了一些针对freeswitch图形化界面,使得用户只需要通过鼠标点击和填写一些基本信息就可以完成freeswitch的配置和操作。 针对freeswitch 1.10.7,开发者已经开发出了一些好用的图形化界面,比如“FusionPBX”和“FreeSWITCH-GUI”。这些界面的主要特点是简单、易用、可扩展,可用于管理用户、呼叫路由、语音信箱等等freeswitch的相关服务。 以“FusionPBX”为例,其界面设计比较简洁,主要分为左侧的菜单栏和右侧的内容展示区。通过菜单栏的操作,用户可以完成一些相应的功能,比如添加、删除用户,配置呼叫路由,设置CallCenter等等。同时,FusionPBX也提供了一些实用的功能,比如在线音频播放和录制,呼叫会议等等。 值得注意的是,图形化界面只是对freeswitch的操作和配置进行了简化和优化,并不代表可以完全替代命令行操作。因此,对于freeswitch的使用者,仍需掌握一些基本的命令行操作和配置知识,以便更好地利用图形化界面完成自己的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾宝玉的玉宝贾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值