SJTU × ByteDance course project.
By Yang Yiwei、Chen Qi、Lai Jingzhi、Yang Zhengyu
两个lib文件很大,clone很慢可以通过网盘下载 链接:https://pan.baidu.com/s/1VX_Dtgpigv-I11CeCF66hQ 提取码:v09c
- 为四路输入都分配了视频窗口,且支持动态加入和离开
- 添加了发送聊天消息的功能,并优化了显示效果
- 取消了回车键退出程序的功能,现在回车键可以直接发送聊天框内容
- 增加了hw1中记录上次登录信息并在下次登录时自动填写的功能
使用了两个电脑一台手机,由于电脑没有摄像头所以使用的是两个虚拟摄像头(一个trial视频一个鸡视频)和一个屏幕分享流。
HWND CRtcWinDemoDlg::AllocateWindow(bool is_local, std::string track_id)
- demo中这个函数只根据
is_local
判断分配第一个窗口还是第二个窗口,我们修改让其根据类数组成员remote_window_hwnd_registered[3]
给track
分配没有被占用的远端窗口。 - 在
OnInitDialog()
初始化的时候需要重置窗口分配状态remote_window_hwnd_registered
均为0
- 在
AllocateWindow()
分配远端窗口时需要给对应的数组位置的值置为1
,表示已被分配。 - 在
OnBnClickedBtnLeave()
离开房间、OnDestroy()
结束程序时需要重置窗口分配状态remote_window_hwnd_registered
均为0
。 - 在
RemoveTrack()
移除某个track
的时候把对应的remote_window_hwnd_registered
置为0
.
- demo中这个函数只根据
OnBnClickedBtnSend()
-
添加发送聊天消息的功能,发送按钮绑定了
OnBnClickedBtnSend()
,在其中将获取的消息加上发送方的消息打包为json
。 -
json
格式为:{ "notification": true, "method": "broadcast", "data": { "info": { "msg": "hello", "senderName": "pc" }, "rid": "byte", "uid": "2556a3dc-32f1-44c5-85b0-4516fa92f8d1" } }
-
消息方法为
broadcast
,也会对本地进行推送,所以不需要再专门设置本地聊天框显示自己发送的消息(我之前理解错了)。 -
需要注意的是按钮发送消息后需要清空输入框。
-
其中遇到了一个
CString
转char*
的问题,本来还自己写了转换,后来发现只需要用已经写好的CStringToStdString()
将CString
转string
,再加个.c_str()
即可。
-
- 记录上次登录信息并在下次登录时自动填写的功能
- 增加了hw1中记录上次登录信息并在下次登录时自动填写的功能,分别是
SaveProfile()
和LoadProfile()
,在hw1中我将CString
转为LPCWSTR
再去存储有些麻烦,现在我知道了更简单的方法。
- 增加了hw1中记录上次登录信息并在下次登录时自动填写的功能,分别是
- 优化了聊天窗的视觉效果
- 把CHARFORMAT改成了CHARFORMAT2类型,效果更丰富,更容易区分本地和远程用户。也给聊天窗设置了自动换行,否则遇到特别长的消息看不全。
- 取消了回车键退出程序的功能
- 之前在聊天窗口条件反射按
Enter
键,结果程序直接结束了。现在回车键可以直接发送聊天框内容,实现方法是重载了从CDialog
继承过来的OnOK()
,并将其绑定到IDOK
事件上。
- 之前在聊天窗口条件反射按