WebRTC C/C++ API 示例代码 – 播放和录音

ideawu 2013-08-13 08:54:35
转自: http://www.ideawu.net/blog/archives/727.html

WebRTC 的音频引擎封装了音频设备的统一接口, 使用者不用关心代码是 Windows, Mac OS X, Linux , iOS 或者 Android 等平台. 这也是一件非常棒的事情, 这个封装如果抽取出来, 就是一个优秀的跨平台音频接口(Audio API).

这里提供一个示例, 讲解如何使用 WebRTC 的 C/C++ API 进行录音和播放声音. 首先, 引入头文件:

#include "webrtc/modules/audio_device/include/audio_device.h"

初始化, 并列出所有的录音设备(有几个麦克风):

webrtc::AudioDeviceModule *audio;
audio = webrtc::CreateAudioDeviceModule(0, webrtc::AudioDeviceModule::kPlatformDefaultAudio);
audio->Init();

num = audio->RecordingDevices();
printf("Input devices: %d\n", num);
for(int i=0; i<num; i++){
char name[webrtc::kAdmMaxDeviceNameSize];
char guid[webrtc::kAdmMaxGuidSize];
int ret = audio->RecordingDeviceName(i, name, guid);
if(ret != -1){
printf(" %d %s %s\n", i, name, guid);
}
}

接着, 选中一个麦克风, 初始化后开始录音:

ret = audio->SetRecordingDevice(0);
ret = audio->InitRecording();

AudioTransportImpl callback(audio);
ret = audio->RegisterAudioCallback(&callback);
ret = audio->StartRecording();

不过, 在开始录音之前, 你需要注册一个回调类, 然后在回调方法中把录音得到的数据保存起来. 需要注意的是, 这个回调是在一个单独的线程中执行的, 要注意多线程安全问题.

回调函数 webrtc::AudioTransport::RecordedDataIsAvailable() 并没有什么特殊的, 就是拿到一段 10ms 的音频采样(samples) 进行处理.

播放声音的API和录音的API基本类似.

这里有一个完整的示例代码, 甚至还包括了 VAD(静音检测).

...全文
690 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
modyaj 2016-03-12
  • 打赏
  • 举报
回复
好痛苦啊!咋录音呢楼主!?

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧