|
本帖最后由 杨家超 于 2018-9-18 20:41 编辑
AnyChat一直致力于为行业客户提供音视频整体解决方案。我们注意到,在某些特定的业务场景中,会需要采集声卡播放的声音(之前只能采集麦克风的声音)。比如:远程教育应用场景中,老师需要给学生播放课件,其中课件的声音就需要从声卡播放中采集出来。经过AnyChat技术团队的深入研发,目前在Windows平台的最新版本 AnyChatSDK r7554中已经提供出这种能力,并且已开放相应的API接口。
一、使用方式
1、SDK内部嵌入“Native Audio Play Capture”声卡采集设备
2、上层可以给声音采集设备绑定相应的流号,根据绑定的流号对设备进行开/关操作
二、示例代码
1、初始化SDK之后,添加声卡采集设备- #define BRAC_SO_AUDIO_PLAYCAPTURE 79 ///< 音频播放采集参数设置(参数为int型,0 关闭[默认],1 开启)
- BOOL bEnableNativeCapture = TRUE;
- BRAC_SetSDKOption(BRAC_SO_AUDIO_PLAYCAPTURE,(PCHAR)&bEnableNativeCapture, sizeof(bEnableNativeCapture));
复制代码 2、给每个声音采集设备绑定流号- #define BRAC_STREAMINFO_AUDIODEVICENAME 195 ///< 音频采集设备名称
- #define NATIVE_AUDIO_PLAY_CAPTURE_INDEX 5 // 为了方便对方请求时指定声卡采集流,这里固定声卡采集设备的流号为5
- // 获取音频采集设备的列表数量
- DWORD dwDeviceNum = 0;
- BRAC_EnumAudioCapture(NULL, dwDeviceNum);
- // 获取设备列表名称
- char **pDeviceName = new char *[dwDeviceNum];
- BRAC_EnumAudioCapture((TCHAR **)pDeviceName, dwDeviceNum);
- // 给声卡采集的设备绑定指定流号,其他的设备从0开始按顺序编号
- for (DWORD i = 0; i < dwDeviceNum; i++){
- char pName[255] = {0};
- strcpy_s(pName, 255, pDeviceName);
- if(strstr(pName, "Native Audio Play Capture"))
- BRAC_SetUserStreamInfo(-1, NATIVE_AUDIO_PLAY_CAPTURE_INDEX, BRAC_STREAMINFO_AUDIODEVICENAME, pName, strlen(pName));
- else
- BRAC_SetUserStreamInfo(-1, i, BRAC_STREAMINFO_AUDIODEVICENAME, pName, strlen(pName));
- }
- for (DWORD i = 0; i < dwDeviceNum; i++){
- GlobalFree(pDeviceName);
- }
- delete[] pDeviceName;
- pDeviceName = NULL;
复制代码 3、打开声卡采集设备采集音频- BRAC_UserSpeakControlEx(-1, TRUE, NATIVE_AUDIO_PLAY_CAPTURE_INDEX);
复制代码 |
|