数据注入

输入与输出不同,所有的输入都需要使用InjectData接口进行数据注入。该数据开发者通过InjectData注入到服务端,并通过VmiCmd枚举中的MIC_SEND_MIC_DATA命令字指定。示例如下:

1
2
3
4
5
6
7
8
9
VmiDataType module = DATA_MIC;
VmiCmd cmd = MIC_SEND_MIC_DATA;
uint8_t micData[240];
AudioData audioData;
audioData.size = sizeof(micData);
uint8_t *data = new uint8_t[sizeof(AudioData) + sizeof(micData)];
memcpy(data, &audioData, sizeof(AudioData));
memcpy(data + sizeof(AudioData), micData, sizeof(micData))
InjectData(module, cmd, data, sizeof(AudioData) + sizeof(micData));

约束说明

麦克风帧需要按照稳定的节奏注入,否则会导致声音听起来不连续。具体约束与default.prop配置文件中vmi.mic.cachefactor的取值有关,该配置项表示麦克风帧队列的缓存大小,有以下4个取值:

  • 如果使用PCM模式传输麦克风数据,建议客户端到服务端的上行网络带宽不低于2Mbps。
  • 注入的麦克风帧之间不能混入空白帧,否则可能会导致声音听起来不连续。