【背景】
公司的内部电话系统租金昂贵,而且还经常出问题。疫情期间,大多数同事在家办公又无法使用,成本效益比极低。作为专心创造的技术人员,我就打算给公司开发基于网络的内网通信程序。
【方案】使用Python的vidstream包实现双向通话
【具体Coding】from vidstream import AudioReceiver
from vidstream import AudioSender
import threading
import socket
# ip = socket.gethostbyname(socket.gethostname())
receiver = AudioReceiver('192.168.3.108',5555)
receive_thread = threading.Thread(target=receiver.start_server)
#
# sender = AudioSender('192.168.3.106',5555)
# sender_thread = threading.Thread(target=sender.start_stream)
receive_thread.start()
# sender_thread.start()
这里由于只是做一个单向测试,所以sender的部分都被注释了,对端也需要开启一个脚本,在单向测试中对端的脚本只需要写Receiver即可。
【代码解析】实现通信,就需要发送和接收两个动作,每个动作都占用一个Port,比如A和B通信,A送B收用9999端口,A收B送用5555端口。 IP的设置上,对于接收类,自己的角色就是接收服务器,所以IP用自己的局域网IP,而对于发送类,应该写对端的IP。 而且因为接收端被视为服务器,所以receiver类用的是start_server方法,等待对端的信息,而sender类用的是start_stream(开始发送数据流)。
【测试结果】我用另一台笔记本介入家庭局域网,用笔记本自带麦克发送声音,音质等都还不错的。
【正式投产】这里实现的只是简单的核心功能,在此基础上可以配上符合公司需求的各类逻辑,比如对声音的控制,用户界面,Log功能,Log的查询功能等。只要核心功能可以实现,其它业务逻辑的附加没有太大问题。