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. C#时间格式化(Datetime)用法详解
  2. shell转换特殊的格式(%b)到时间戳  08/Dec/2016
  3. JavaScript-2(数组与字符串的方法)
  4. FreeMarker 一二事 - 静态模板的使用与生成
  5. [工具]-文件明文导出工具
  6. Google在Android P中隐藏了真棒的按应用自动旋转功能
  7. 开发环境很重要,需要学习如何自己搭建开发环境
  8. 千头万绪:从一道面试题看数据库性能和安全的方方面面
  9. win10删除开机密码_讲解win10忘记开机密码
  10. wireshark 分析过滤数据
  11. 第二十九篇、UICollectionView瀑布流
  12. Numpy.fromfunction用法
  13. 嘿,程序猿,你该学点经济学了!
  14. 记一次从 git pull 出现 Untracked FilesPervent Merge
  15. python处理word替换_python替换word中的关键文字(使用通配符)
  16. 《爱乐之城》:两个追梦人令人唏嘘又动容的爱情故事
  17. vmstat命令详解!看了很多vmstat的详解,自己总结的
  18. poi word转html 根号,#根号分治,树上倍增#洛谷 3591 [POI2015]ODW
  19. mysql中utf8和utf8mb4的详解用法与区别
  20. 空间射线与三角形相交算法的两种实现

热门文章

  1. python jsonpath库_Python爬虫(十六)_JSON模块与JsonPath
  2. 在DNG-SDK基础上写DNG(RAW to DNG)
  3. re学习笔记(93)攻防世界 - mobile进阶区 - Illusion
  4. 步步高java短信恢复,步步高智能手机忘记短信密码如何处理
  5. 单载波 NOMA (SC NOMA) - 可以支持多少用户
  6. windows server 2012 r2打造工作站链接 和 RTSS画面防止撕裂方法(包括笔记本独显撕裂,视频撕裂等)...
  7. Android 8.1/9.0 MTK Camera源码分析之录像快门声音控制流程
  8. 怎么重启php程序,php重启
  9. NRF52832学习笔记(5)——SPI(主机)接口使用
  10. video + canvas = magic--html-canval前段渲染