第一次写难免磕磕碰碰,也收获了不少。

语音通信插件分为3个部分

1、首先是个UE4插件

2、能够采集音频数据 能够播放音频数据

3、能够进行网络通信

-------------

没找到什么可以利用的现成音频采集接口,所以使用了Windows 底层的 wavein/out 相关API

我这里使用了2线程分别进行 收/发 或者说采集/播放 功能。嗯,使用的是UE4 的线程实现  继承与FRunnable

现在两个工作线程已经搞定了,剩下的就是需要控制这两个线程的工作状态了,涉及到线程同步的问题。

最理想的方式是 注册事件通信,但似乎在UE4中...总之没用上。于是我这里使用的是static  变量。

好了 现在控制两个工作线程也搞定了。剩下的就是如何开始/结束 双端的通信。在VC 或者MFC 类似的通信程序中,

大都采用事件同步,所有不需要如我这般多做工作,但遗憾的是我是static 同步,所以就需要额外的工作了。

如上图所示:

用户(我这里是Actor ) 只有2个功能:

红线表示开启 广播收发功能 其目的是获取目标端的ip地址,这里 接收广播线程当接收到广播消息后会和自身ip比较 如果相同则继续接收,否则停止接收 关闭线程。而发生广播线程是一直发送消息的,除非自身收到消息.

绿线表示开始 语音会话功能 其目的是开始管理线程来管理会话状态,开启之后即表明可以随时 进行语音通信.

真正的语音通信 是通过 用户通知 管理线程 来进行的

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐