/RtcWinDemo

SJTU×ByteDance course project.

Primary LanguageC++MIT LicenseMIT

RtcWinDemo

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.

  • OnBnClickedBtnSend()
    • 添加发送聊天消息的功能,发送按钮绑定了OnBnClickedBtnSend(),在其中将获取的消息加上发送方的消息打包为json

    • json格式为:

      {
      	"notification": true,
      	"method": "broadcast",
      	"data": {
      		"info": {
      			"msg": "hello",
      			"senderName": "pc"
      		},
      		"rid": "byte",
      		"uid": "2556a3dc-32f1-44c5-85b0-4516fa92f8d1"
      	}
      }
      
    • 消息方法为broadcast,也会对本地进行推送,所以不需要再专门设置本地聊天框显示自己发送的消息(我之前理解错了)。

    • 需要注意的是按钮发送消息后需要清空输入框。

    • 其中遇到了一个CStringchar*的问题,本来还自己写了转换,后来发现只需要用已经写好的CStringToStdString()CStringstring,再加个.c_str()即可。


  • 记录上次登录信息并在下次登录时自动填写的功能
    • 增加了hw1中记录上次登录信息并在下次登录时自动填写的功能,分别是SaveProfile()LoadProfile(),在hw1中我将CString转为LPCWSTR再去存储有些麻烦,现在我知道了更简单的方法。

  • 优化了聊天窗的视觉效果
    • 把CHARFORMAT改成了CHARFORMAT2类型,效果更丰富,更容易区分本地和远程用户。也给聊天窗设置了自动换行,否则遇到特别长的消息看不全。

  • 取消了回车键退出程序的功能
    • 之前在聊天窗口条件反射按Enter键,结果程序直接结束了。现在回车键可以直接发送聊天框内容,实现方法是重载了从CDialog继承过来的OnOK(),并将其绑定到IDOK事件上。