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(静音检测)

WebRTC的C/C++ API相关推荐

  1. WebRTC学习之路---API及SignalServer

    一.API 有些浏览器获取音视频设备的权限要求不高,比如Chrome浏览器:不过狐火相对就比较高了,要想在诸如火狐或者MAC的浏览器中获取设备名称,可以在允许浏览器访问摄像头之后,再去显示(Promi ...

  2. html5视频录制,在HTML5视频录制方面,我们为什么选WebRTC而不选Media Recorder API

    作者:Pipe(原文链接) 翻译:刘通 原标题:Why we chose WebRTC over Media Recorder API for HTML5 Video Recording 通过这篇文章 ...

  3. WebRTC 教程一:WebRTC信令、架构和 API 入门

    本文主要介绍了 WebRTC 是什么,其和 Websocket 的异同,WebRTC 信令,架构和 API 入门. What is WebRTC WebRTC: Web Real Time Commu ...

  4. 使用WebRTC搭建前端视频聊天室——数据通道篇

    转自 使用WebRTC搭建前端视频聊天室--数据通道篇 在两个浏览器中,为聊天.游戏.或是文件传输等需求发送信息是十分复杂的.通常情况下,我们需要建立一台服务器来转发数据,当然规模比较大的情况下,会扩 ...

  5. WebRTC学习笔记

    http://blog.chinaunix.net/uid-24567872-id-3961702.html 1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在 ...

  6. WebRTC详解-zz

    1.WebRTC目的 WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox\...) 轻易快捷开发出丰富 ...

  7. 【Webkit Blog翻译】深入研究WebRTC | 内有福利

    "本文译自A Closer Look Into WebRTC" 我们在最近的一篇WebKit博客中宣布了对High Sierra平台和iOS中Safari的WebRTC支持.现在, ...

  8. WebRTC基本介绍

    WebRTC基本介绍 目录 什么是WebRTC WebRTC框架 1. 什么是WebRTC WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是 ...

  9. voip和rtc_为什么开发WebRTC与VoIP开发不一样?(上)

    作者:Tsahi Levent-Levi(原文链接) 翻译:刘通 原标题:Why Developing With WebRTC is Different than VoIP Development? ...

最新文章

  1. CCS卸载安装过程及所遇问题
  2. Linux 常见目录与区别
  3. proto的介绍和基础使用
  4. dart --- 环境配置
  5. 计算机模拟技术在教学上的应用,计算机模拟技术在水利工程学科试验教学中的应用...
  6. 使用CSS实现无滚动条滚动
  7. mysql left join和or_Case:MySQL使用left join的时候or改写成union可以提高效率
  8. keras笔记-mnist数据集上的简单训练
  9. php重点,php – 课程。重点是什么?
  10. 6.打包和部署应用 6.1创建可执行的JAR的Spring Boot
  11. 孙鑫VC学习笔记:第十二讲 (四) 用API函数、CFile类操作文件
  12. 阶段3 2.Spring_03.Spring的 IOC 和 DI_12 注入集合数据
  13. 免费推广网站实例(珍藏版)
  14. 爬虫python下载电影_python爬虫--爬取某网站电影下载地址
  15. PR卡点插件 Premiere自动卡点自动剪辑插件 音乐鼓点节拍插件BeatEdit v1.0.10.2+使用教程
  16. redhat安装wine教程_超简单制作多合一系统安装启动U盘的工具
  17. AAEGan 简介与代码实战
  18. bug解决:如何解决浏览器显示乱码问题?
  19. TV(智能电视)app开发,电视wifi连接Android studio 真机调试
  20. 制作一套适用于Oracle数据库的县及县以上行政区划数据

热门文章

  1. 斐波那契的几种思路,你都会吗
  2. org.apache.ibatis.binding.BindingException: Type interface xxx.Mapper is not known to the MapperRegi
  3. dnf丢失clientbase_LolClientBase.dll下载
  4. 29-分数求模(逆元)B Jxc军训
  5. jmeter应用---逻辑控制器(一)
  6. 液压基础知识01 —— 压力单位换算
  7. harmonyos域名,有名网域名投资-华为收购Harmonyos.com?其它域名都在谁手上?
  8. docker容器内部署prometheus
  9. ZBrush主要干什么工作?ZBrush的发展方向
  10. STM32F1和STM32F4这两个系列都是单片机达人的心头好,到底那个好