作为一项任务,决定创建一个简单的应用程序,该应用程序允许在本地网络中的两个(目前)固定或移动设备之间进行音频视频呼叫,而无需连接到Internet。这样的应用程序的安装和初始配置应该足够简单,以便任何高级enikey都可以毫无问题地处理它,并向用户展示如何进行呼叫,并且如果他具有适当的技能,则可以在设计和功能方面进行较小的改进。客户端应该是配备了多媒体输入输出设备并允许您运行合适的浏览器的任何设备(Firefox或Chrome-似乎在5月进行了测试)。
怎么做
如您所知,用于两个订阅者之间通信的WebRTC技术建议使用RTCPeerConnection类型的对象,开发人员的主要任务是组织呼叫者和被呼叫者之间的文本信息交换(SDP报价,SDP答复,ICE候选)。换句话说,开发人员首先需要使用用于浏览器JavaScript的API创建文本聊天,然后将多媒体部分附加到该文本聊天-RTCPeerConnection事件以及用于发送和处理数据接收的方法。
实施技术和文本聊天API的选择权仍在开发人员手中。许多人(尤其是Mozilla在其RTCPeerConnection的官方示例中)更喜欢使用WebSocket API和相应的服务器-例如,在Node.JS上。但是,考虑到使部署尽可能简单的任务,我决定从不过度复杂服务器应用程序的角度出发,更重要的是,为了将页面和脚本交付给客户端设备,需要额外的Web服务器。因此,API决定将xmlHttpRequest与对同一Web服务器的定期客户端调用一起使用。我不能说它在客户端设备的资源(和电池)消耗以及没有刹车的情况下是完美的,但是如果在开发时考虑到一些细微差别,它就可以正常工作。也许,在下一版本中,我将添加一个WebSocket服务器并相应地重新设计API,但不是一次完成。
决定将服务器作为Windows的Lazarus的一部分。 Synapse软件包提供了联网功能。在某些方面,这可能是一个变态,为了使所有功能都能按预期工作,我不得不认真进行一些修改。但是,一个exe,两个dll(OpenSSL库),一个自签名SSL证书的文件以及一个密钥以及一些配置文件(加上静态文件)使您不必为服务器的技术水平和启动应用程序的方式而烦恼。我在32位版本的Windows XP下甚至在2009年的Asus Eee PC 900上测试了该服务器的第一个版本,尽管它并非没有作弊,而是最近以更现代,体积更大的版本取代了常规的超慢SSD。这是在性能方面。服务器的“安装”正在将下载的zip归档文件解压缩到任何合适的文件夹中,编辑用户帐户配置的JSON文件并启动程序的exe文件(窗口中还有一个按钮,但是您可以在命令行中指定参数以立即启动Web服务器)。因为我有这样的经验,所以我正在考虑一种更严肃的服务器部分。每个事物都有它的时代。
除了API的实际组织之外,我们的服务器还为浏览器提供静态文件(登录和聊天网页,样式,图像,脚本,铃声)。通常,我尝试尽可能多地不使用第三方库,但是由于我的设计和html布局并不那么热,我决定使用jQuery.UI以及相应地使用jQuery的Web服务器也将其静态发送。所有静态文件都位于程序文件夹的单独子文件夹中。当然,如果需要并具有适当的技能,可以观看甚至更改它们。在JavaScript中,代码带有注释,您可以根据需要从中学习。
如何组织沟通
要组织通信,最主要的是选择客户端设备(计算机,笔记本电脑,智能手机,平板电脑)和带有“服务器”的Windows机器(也可以充当客户端),并将其组合到一个公用网络中。在客户端设备上,我测试了过去几年中从版本7开始在Android上发布的几款廉价智能手机,以及Windows 10上的计算机和笔记本电脑,其中包括两个连接的网络摄像头;他们表现不错。为了娱乐,我什至在制造商的Lubuntu(或Kubuntu,我记不起来了)上在Orange Pi One上测试了第一个版本。出乎意料的是,即使视频速度变慢,并且聊天页面打开了很长时间(即使我不想谈论加载系统和打开浏览器),它也仍然有效。
我们的服务器以上述方式安装在“服务器”打字机上,并配置了用户帐户。每个用户都需要使用密码登录。
一切都像这样。用户使用HTTPS协议的IP地址或域名,通过浏览器输入“服务器”打字机。他们在那里输入用户名密码,并进入带有联系人列表的聊天页面。当您单击联系人时,将打开一个对话框窗口,其中包含文本消息的历史记录(顺便说一句,服务器仅将其存储在RAM中,尚无法存储在文件中),聊天字段和带有选择音频和(或)视频复选框的音频视频通话形式。要进行视频通话,用户标记相应的复选框,按下通话按钮并确认对浏览器的许可。被叫用户开始发出铃声,并以相同的标志打开响应表单。单击“答案”按钮后,浏览器还将询问访问多媒体设备的权限。然后会打开一个呼叫窗口。
我不能说我在视频会议,视频咨询等软件方面拥有丰富的经验,但是,例如,在计算机上的Google Hangouts中(我不知道在移动设备上),我没有机会将自己的心爱者全屏显示,从理论上讲,当您需要清楚地看到向对话者显示的内容时(例如,通过智能手机的后置摄像头),可能需要进行远程咨询。在此聊天中,在通话对话框中,我决定为视频制作两个选项卡-对话者和用户本人。从用户选项卡上的当前版本开始,除了视频本身,还有用于选择摄像机和麦克风的字段。您可以在对话中即时更改其值。也许对某人有用。
现在,我将简要描述充满发展的视锥细胞。也许它将对某人在开发和调试他们的解决方案时有所帮助。
WebRTC的工作和实施的现代功能,通常与JavaScript中的多媒体一起使用
在这里,简要;可以在static / js / videoChat.js javascript文件的注释中找到详细信息
- 可以肯定地说,Chrome浏览器以及其他浏览器也允许您仅在可通过HTTPS访问的网站上使用getUserMedia。
- 仅在成功调用getUserMedia后才能获得音频和视频输入设备的列表。
- 只有在用户显示站点上的活动(例如,单击某些控件)后,才可以通过JavaScript(通过html视频或音频元素的play()方法)自动开始播放声音。
- promise setLocalDescription , offer. RTCPeerConnection ICE-, .
- « » getUserMedia RTCPeerConnection. , , .
- 有关移动设备的许多描述都引用FaceingMode属性来选择前置或后置摄像头。实际上,我不知道在旧设备中如何使用,但在经过测试的智能手机上进行的聊天中,即使不使用此属性也可以进行切换。但严格考虑第5条。
该列表很可能并不详尽。我认为在进一步发展的过程中还会有更多。如果有人知道如何解决这些限制,并因此简化了程序或使用它,请在评论中写。
Lazarus网络应用程序开发人员大人物
Synapse当前仅支持1.0.x OpenSSL库。在1.1中,很多东西已经实现了不同,其他甚至库名也是如此。此外,仅将dll放在程序文件夹中是不够的。您还需要一个配置文件(openssl.cnf),该文件的路径是通过OPENSSL_CONF环境变量设置的。
在哪里可以下载
程序页面上的链接www.lubezniy.ru/soft/videochat上提供了Win32和Win64程序的发行版以及Lazarus上服务器端的源代码
PS:顺便说一句,是否有人知道如何使用Lazarus从相同源自动进行构建两种不同的exe-Win32和Win64?从Win64到Win32的交叉编译器已启动并正在运行,但是每次更改项目中的选项都是不正确的。
PPS:谁尝试过,请在评论中分享您的印象。